dubbo+zookeeper实现服务远程调用

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和  Spring 框架无缝集成。

主要核心部件:

  • Remoting:  网络通信框架,实现了 sync-over-async 和 request-response 消息机制.
  • RPC:   (Remote Procedure Call Protocol远程过程调用协议), 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
  • Registry:  服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo工作原理

dubbo+zookeeper实现服务远程调用_第1张图片

dubbo+zookeeper实现服务远程调用_第2张图片

说明:

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。

Container: 服务运行容器。

调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

 

代码实例:

一,dubbo提供者(服务提供者)

1、web工程pom文件下引入主要包:引入需要的jar包


            org.springframework
            spring-context
            ${spring-framework.version}
        
 
        
            com.alibaba
            dubbo
            2.4.10
            
                
                    spring
                    org.springframework
                
            
        
 
        
            com.101tec
            zkclient
            0.3
        

2、定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)


package com.alibaba.dubbo.demo;
 
public interface DemoService {
 
    String sayHello(String name);
 
}

3、接口实现:(对服务消费方隐藏实现)

在服务提供方实现接口:(对服务消费方隐藏实现)
package com.alibaba.dubbo.demo.provider;
 
import com.alibaba.dubbo.demo.DemoService;
 
public class DemoServiceImpl implements DemoService {
 
    public String sayHello(String name) {
        return "Hello " + name;
    }
 
}

4、发布服务:

通过dubbo 建立service这个服务,并且到zookeeper上面注册,填写对应的zookeeper服务所在 的IP及端口号。

用Spring配置声明暴露服务:


 
    
    
 
    
    
 
    
    
 
    
    
 
    
    
 

说明:

   dubbo:registry 标签一些属性的说明:

      1)register是否向此注册中心注册服务,如果设为false,将只订阅,不注册。

      2)check注册中心不存在时,是否报错。

      3)subscribe是否向此注册中心订阅服务,如果设为false,将只注册,不订阅。

      4)timeout注册中心请求超时时间(毫秒)。

      5)address可以Zookeeper集群配置,地址可以多个以逗号隔开等。

  dubbo:service标签的一些属性说明:

     1)interface服务接口的路径

     2)ref引用对应的实现类的Bean的ID

     3)registry向指定注册中心注册,在多个注册中心时使用,值为的id属性,多个注册中心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A

     4)register 默认true ,该协议的服务是否注册到注册中心。

二、dubbo消费者(服务消费者)

通过dubbo引入需要调用的服务:

通过Spring配置consumer.xml引用远程服务:


 
    
    
 
    
    
 
    
    
 

调用服务(直接调用):

加载Spring配置,并调用远程服务:(也可以使用IoC注入)
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.alibaba.dubbo.demo.DemoService;
 
public class Consumer {
 
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://dubbo.io/consumer.xml"});
        context.start();
 
        DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
        String hello = demoService.sayHello("world"); // 执行远程方法
 
        System.out.println( hello ); // 显示调用结果
    }
 
}

参考文章:https://www.cnblogs.com/jun-ma/p/5341027.html

你可能感兴趣的:(SOA,微服务,分布式)