spring集成Dubbo和zookeeper

本例环境:
        jdk 1.7
        zookeeper-3.4.10
        dubbo2.5.6
下载地址:
        zookeeper官网下载: https://archive.apache.org/dist/zookeeper/
测试demo下载地址:
        包含: spring-dubbo-provider与spring-dubbo-consumer的demo源码
        地址: https://github.com/zhangbeizhen/spring-dubbo
概念:    
        Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.
        RPC: RPC是远程过程调用(Remote Procedure Call).
        SOA: 面向服务的架构(Service-Oriented Architecture).
分享:
        当下对分布式服务有些模糊,根据网上提供资料,搭建一个测试环境demo加深印象并记录.
本例搭建测试情况:
        一个单例zookeeper作为注册中心,
        一个服务端spring-dubbo-provider,向zookeeper注册中心注册,并暴露一个服务.
        一个客户端spring-dubbo-consumer,向zookeeper注册中心注册,根据接口获取远程调用服务.
        以上,三个就可以了,进行测试,向注册中心注册的信息可以使用zookeeper自带的客户端查看信息.
        当然,本例也搭建了个dubbo-admin,通过浏览器可视化查看服务信息.
        在网上随便找了一个低版本war包的进行搭建,目前应该是高版本的受欢迎,有时间可以尝试.
        使用的war包是: dubbo-admin-2.5.4.war测试使用的话很多地方可以下载.
1.安装配置zookeeper        
1.1在D:\aServ\du-zk下解压zookeeper-3.4.10.tar,解压后目录名称:zookeeper-3.4.10
1.2在D:\aServ\du-zk\zookeeper-3.4.10\conf下,将zoo_sample.cfg重命名为zoo.cfg
1.3打开zoo.cfg修改
将  dataDir=/tmp/zookeeper
修改为: dataDir=D:\aServ\du-zk\\zkdata
并在D:\aServ\du-zk新建zkdata文件夹
1.4其它配置保持默认即可,如果想用命令行全局启动即需配置全局变量,
如果直接进入bin目录启动就不需要配置全局变量,本例不配置全局变量.
在zoo.cfg文件中可以Zookeeper[默认端口2181].
1.5启动zookeeper
在D:\aServ\ka\zookeeper-3.4.10\bin,
双击zkServer.cmd即可启动服务端,
双击zkCli.cmd即启动客户端,可以操作一些指令.
本例使用cmd命令行启动:
启动命令是:
        .\zkCli.cmd -timeout 5000 -server 127.0.0.1:2181
比如查看topics,使用指令
    ls /brokers
2.服务提供者 spring-dubbo-provider
2.1 本例spring-dubbo-provider是基于spring的web项目
        服务提供者集成dubbo相关部件: 
        公共接口: 用于发布服务.
        实现类: 发布服务的具体实现.
        dubbo配置文件: 注册到zookeeper和发布服务到zookeeper注册中心.
        pom.xml: 引入dubbo,zookeeper,zkclient模块jar包.
    
2.2 公共接口 GirlService.java,注意接口全路径

package com.zbz.api;
public interface GirlService {
    public String getGirlInfo();
}

2.3 接口实现 GirlServiceImpl.java

@Service("girlService")
public class GirlServiceImpl implements GirlService {
  private static final Logger logger = LoggerFactory.getLogger(GirlServiceImpl.class);
  @Override
  public String getGirlInfo() {
      String info = "The Girl is "+getCup()+" Cup.";
    logger.info("服务提供者服务信息: {}",info);
      return info;
  }
  private String getCup() {
      int in = 5;
      in = (int) (Math.random() * 6 + 1);
      if (in == 1) {
          return "A";
      } else if (in == 2) {
          return "B";
      } else if (in == 3) {
          return "C";
      } else if (in == 4) {
          return "D";
      } else if (in == 5) {
          return "E";
      } else if (in == 6) {
          return "F";
      } else if (in == 7) {
          return "G";
      }
      return "C";
  }
}

2.4 dubbo配置 dubbo-provider.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- dubbo配置 20191025 -->
    <!-- 应用名称 -->
    <dubbo:application name="girl-provider" />
    <!-- 注册中心配置,用于配置连接注册中心相关信息 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 服务配置,用于暴露一个服务 -->
    <dubbo:service interface="com.zbz.api.GirlService" ref="girlService" />
</beans>    

2.5 pom.xml 

<!-- dubbo 2019-10-25 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>dubbo</artifactId>
  <version>2.5.6</version>
</dependency>
<!-- zookeeper 2019-10-25 -->
<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.10</version>
</dependency>
<!-- zkclient 2019-10-25 -->
<dependency>
  <groupId>com.101tec</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.8</version>
</dependency>

3.服务消费者 spring-dubbo-consumer
3.1 本例spring-dubbo-consumer是基于spring的web项目
        服务消费者集成dubbo相关部件: 
        公共接口: 用于RPC调用zookeeper中已注册的服务,与服务提供者是一样接口,包括包名全路径.
        dubbo配置文件: 注册到zookeeper和创建远程服务代理.
        pom.xml: 引入dubbo,zookeeper,zkclient模块jar包.  
 
3.2 公共接口,GirlService.java 注意接口全路径

package com.zbz.api;
public interface GirlService {
    public String getGirlInfo();
}

3.3 dubbo配置 dubbo-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- dubbo配置 20191025 -->
    <!-- 应用名称 -->
    <dubbo:application name="girl-consumer" />
    <!-- 注册中心配置,用于配置连接注册中心相关信息 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 引用服务配置,用于创建一个远程服务代理 -->
    <dubbo:reference id="girlsService" interface="com.zbz.api.GirlService"/>  
</beans>

3.4 pom.xml 

<!-- dubbo 2019-10-25 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>dubbo</artifactId>
  <version>2.5.6</version>
</dependency>
<!-- zookeeper 2019-10-25 -->
<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.10</version>
</dependency>
<!-- zkclient 2019-10-25 -->
<dependency>
  <groupId>com.101tec</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.8</version>
</dependency>

3.5 调用远程接口服务类 BoyUserServiceImpl

@Service
public class BoyUserServiceImpl {
  private static final Logger logger = LoggerFactory.getLogger(BoyUserServiceImpl.class);
  /**注入dubbo配置文件中,从远程zookeeper获取服务实现类*/
  @Autowired 
  public GirlService girlsService;
  public void getInfo(){
      logger.info("消费dubbo服务开始......");
      String info = girlsService.getGirlInfo();
      logger.info("消费信息: {}",info);
      logger.info("消费dubbo服务结束......");
  }
}

3.6测试controller类 BoyUserController.java

@Controller
@RequestMapping("/service")
public class BoyUserController {
  @Autowired
  private BoyUserServiceImpl boyUser;
  @ResponseBody
  @RequestMapping(value = "girl" ,method = RequestMethod.GET )
  public String service( String str) throws Exception{
      String result ="{\"result\" : \"success\"}";
      boyUser.getInfo();
      return result;
  }
}

4测试
        逻辑步骤:
        1.向spring-dubbo-consumer服务发起 http://127.0.0.1:8080/spring-dubbo-consumer/service/girl请求
        2.进入spring-dubbo-consumer的BoyUserController类的service()方法
        3.进入spring-dubbo-consumer的BoyUserServiceImpl的getInfo()方法
        4.在spring-dubbo-consumer通过com.zbz.api.GirlService接口注入通过dubbo从zookeeper注册中心
        找到与com.zbz.api.GirlService接口对应的实现服务实现.此服务实现是spring-dubbo-provider注册过的.
        5.spring-dubbo-consumer再通过dubbo的RPC机制调用spring-dubbo-provider具体实现.
        6.返回并结束调用逻辑.
4.1启动zookeeper        
        在D:\aServ\du-zk\zookeeper-3.4.10\bin下双击    zkServer.bat 启动zookeeper
        在D:\aServ\du-zk\zookeeper-3.4.10\bin下双击    zkCli.bat 启动zookeeper的客户端
        启动命令是:
        .\zkCli.cmd -timeout 5000 -server 127.0.0.1:2181
4.2启动spring-dubbo-provider
4.3启动spring-dubbo-consumer      
4.4服务消费者日志 spring-dubbo-consumer
        截图:
        
4.5服务提供者日志 spring-dubbo-provider
        截图:
        
4.6zookeeper日志
        截图:
 
4.7zookeeper客户端日志
        截图:
        
5.搭建dubbo-admin-2.5.4监控
5.1 本例使用apache-tomcat-7.0.76
5.2 将dubbo-admin-2.5.4.war包放入webapps目录下启动即可.
5.3 使用 http://127.0.0.1:8081/dubbo-admin-2.5.4 访问
5.4 输入 用户名/口令  root/root
        这些信息在war包下的dubbo.properties配置文件中能找到,具体    
        dubbo.registry.address=zookeeper://127.0.0.1:2181
        dubbo.admin.root.password=root
        dubbo.admin.guest.password=guest

        以上如果zookeeper地址有变更相应做修改.    
        服务提供者:
        截图:
        服务消费者:
        截图:
        

以上,感谢.        

发布了183 篇原创文章 · 获赞 40 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/zhangbeizhen18/article/details/102786529