环境准备:
1. zookeeper-3.4.14 (下载地址:http://archive.apache.org/dist/zookeeper/)
2. dubbo-0.2.0 (下载地址:https://github.com/apache/dubbo-admin/tree/master-0.2.0)
3. spring boot-2.5.5
4. jdk-1.8.0
5. maven-3.6.3
1. Zookeeper的下载和安装
1.1 Zookeeper:
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed
synchronization, and providing group services. (是一个为分布式计算提供维护配置信息、命名注册、分布式
同步和组服务的集中服务)
1.2 下载和配置:
- 下载上述文件
- 解压,在conf文件夹下复制zoo_sample.cfg文件,并命名为:zoo.cfg
-
- 返回到bin/目录下,双击zkServer.cmd开启服务,监听端口2181
-
- 并打开客户端zkCli.cmd发现可以连接服务,表示Zookeeper安装成功!
-
- 客户端输入:ls /(中间包含空格),可以查找注册的节点。dubbo是我新注册的节点,默认只有Zookeeper
-
- 创建节点和获取节点的信息
create –e /nodeName(节点名称) value(值) 比如:create –e /test01 123
get /nodeName(节点名称) 获取节点的信息
-
- 客户端输入:ls /,即可查找注册的节点
2. Dubbo的下载和安装
2.1 Dubbo:
阿里开源的微服务框架,提供了RPC通信与微服务治理两大关键能力
2.2 下载和配置
-
- 下载dubbo-0.2.0
- 在dubbo-admin-master-0.2.0路径下,使用maven打包:mvn clean package -Dmaven.test.skip=true
-
- 打包成功
-
- 在D:\software\installed\dubbo-admin-master-0.2.0\dubbo-admin\target目录下生成dubbo-admin-0.0.1-SNAPSHOT.jar文件,该文件用来启动dubbo
3. 测试环境
-
- 首先打开zkServer.cmd,开启Zookeeper服务;
- 在D:\software\installed\dubbo-admin-master-0.2.0\dubbo-admin\target目录,执行命令:java -jar dubbo-admin-0.0.1-SNAPSHOT.jar 开启Dubbo;
- 本地访问:http://localhost:7001/,网页响应则表示Dubbo Admin管理控制台启动成功,该平台可以监测Java程序向其中注册的服务;
- Dubbo Admin管理控制台登录用户名和密码都为root;
到此,表示dubbo-admin管理平台搭建成功!!!
4. Spring Boot Demo测试
-
- 创建dubbo-zookeeper工程,并添加生产者(provider-service)和消费者(consumer-server)maven模块
项目链接地址:链接: https://pan.baidu.com/s/1SsOaulKgATakWiaYeRQj1A 提取码: 9q8t
-
- 生产者提供购票服务,通过向Zookeeper注册服务,消费者远程进行调用
- 生产者项目结构,需要修改的几部分用红色箭头标出
- pom.xml添加依赖
1 <dependency> 2 <groupId>org.apache.dubbo</groupId> 3 <artifactId>dubbo-spring-boot-starter</artifactId> 4 <version>2.7.3</version> 5 </dependency> 6 7 <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> 8 <dependency> 9 <groupId>com.github.sgroschupf</groupId> 10 <artifactId>zkclient</artifactId> 11 <version>0.1</version> 12 </dependency> 13 14 <!-- 解决日志冲突--> 15 <!-- 引入zookeeper --> 16 <dependency> 17 <groupId>org.apache.curator</groupId> 18 <artifactId>curator-framework</artifactId> 19 <version>2.12.0</version> 20 </dependency> 21 <dependency> 22 <groupId>org.apache.curator</groupId> 23 <artifactId>curator-recipes</artifactId> 24 <version>2.12.0</version> 25 </dependency> 26 <dependency> 27 <groupId>org.apache.zookeeper</groupId> 28 <artifactId>zookeeper</artifactId> 29 <version>3.4.14</version> 30 <!--排除这个slf4j-log4j12--> 31 <exclusions> 32 <exclusion> 33 <groupId>org.slf4j</groupId> 34 <artifactId>slf4j-log4j12</artifactId> 35 </exclusion> 36 </exclusions> 37 </dependency>
- application.properties更改配置
1 server.port=8001 2 3 # 服务应用名字 4 dubbo.application.name=provider-service 5 # 注册中心地址 6 dubbo.registry.address=zookeeper://127.0.0.1:2181 7 # 哪些服务要被注册 8 dubbo.scan.base-packages=com.spring.service
- TicketService接口
1 package com.spring.service; 2 3 public interface TicketService { 4 public String getTicket(); 5 }
- TicketServiceImpl类
1 package com.spring.service; 2 3 import org.apache.dubbo.config.annotation.Service; 4 import org.springframework.stereotype.Component; 5 6 // Zookeeper: 服务注册与发现 7 @Service // 可以被扫描到,在项目一启动就自动注册到注册中心 8 @Component // 使用了Dubbo后尽量不要用Service注解 9 public class TicketServiceImpl implements TicketService { 10 @Override 11 public String getTicket() { 12 return "G001, 开往郑州"; 13 } 14 }
-
- 消费者项目结构,需要修改的几部分用红色箭头标出
- pom.xml添加依赖:同生产者
- ConsumerServerApplicationTests
1 package com.spring; 2 3 import com.spring.service.UserService; 4 import org.junit.jupiter.api.Test; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.boot.test.context.SpringBootTest; 7 9 @SpringBootTest 10 class ConsumerServerApplicationTests { 11 12 @Autowired 13 UserService userService; 14 15 @Test 16 void contextLoads() { 17 userService.buyTicket(); 18 } 20 }
- application.properties更改配置
1 server.port=8002 2 3 # 消费者去注册中心拿服务 需要暴露自己的名字 4 dubbo.application.name=consumer-service 5 dubbo.registry.address=zookeeper://127.0.0.1:2181
- TicketService接口:消费者的接口是从生成者拷过来的,该方法仅是以一种简单的方式实现远程过程调用
- UserService类
1 package com.spring.service; 2 3 import org.apache.dubbo.config.annotation.Reference; 4 import org.springframework.stereotype.Service; 5 6 /* 7 易错 8 这里用的是spring下的service,这样test类的Autowired才能使用 9 */ 10 @Service 11 public class UserService { 12 // 想拿到provider-service提供的票,要去注册中心拿服务 13 @Reference // 引用(远程拿包) 相当于本地的Autowired 14 TicketService ticketService; 15 16 public void buyTicket(){ 17 String ticket = ticketService.getTicket(); 18 System.out.printf("在注册中心买到票: " + ticket); 19 } 20 }
5. 运行
-
- 首先开启Zookeeper注册服务,双击zkServer.cmd;
- 运行ProviderServiceApplication
-
- 执行命令:java -jar dubbo-admin-0.0.1-SNAPSHOT.jar 开启Dubbo,访问http://localhost:7001/发现已向Zookeeper中注册服务
-
- 运行ConsumerServerApplicationTests,输出 “在注册中心买到票: G001, 开往郑州” ,则测试通过!!!
重在记录和分享,如果对你有帮助,请竖起你的大拇指,并点击,Thanks♪(・ω・)ノ!!!