本例环境:
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地址有变更相应做修改.
服务提供者:
截图:
服务消费者:
截图:
以上,感谢.