如果文章中代码不便于阅读,请使用电脑查看或点击阅读原文。
GitHub:https://github.com/dkbnull/SpringBootDemoGitee:https://gitee.com/dkbnull/SpringBootDemo
0 开发环境
-
JDK:1.8
-
Spring Boot:2.7.18
-
ZooKeeper:3.9.2
-
Dubbo-Admin:0.6.0
1 安装ZooKeeper
1.1 下载压缩包
下载地址:https://zookeeper.apache.org/releases.html
选择一个版本下载即可
然后
1.2 下载完成后解压
1.3 新建data、log目录
在安装根目录下新建data文件夹和log文件夹
1.4 修改zoo.cfg
进入conf目录,将zoo_sample.cfg文件,复制一份,重命名为zoo.cfg
修改zoo.cfg配置文件,将 dataDir=/tmp/zookeeper 修改成zookeeper安装目录所在的data文件夹,再添加一条数据日志的配置(根据自己的安装路径修改)
1.5 启动服务端
进入bin目录,双击zkServer.cmd,启动服务端程序
控制台显示binding to port 0.0.0.0/0.0.0.0:2181,表示服务端启动成功
1.6 启动客户端
双击zkCli.cmd,启动客户端程序
控制台出现Welcome to ZooKeeper!,表示客户端启动成功
1.7 测试
在客户端页面,可以使用linux命令进行操作
#列出zookeeper根下保存的所有节点ls /#创建一个test节点,值为123create -e /test 123#获取test节点的值get /test
2 安装Dubbo-Admin
Dubbo其实是一个jar,能够帮助Java程序连接到ZooKeeper,并利用ZooKeeper消费、提供服务。
为了让用户更好地管理监控众多的Dubbo服务,官方提供了一个可视化的监控程序Dubbo-Admin。该监控程序不安装并不影响Dubbo的使用。
2.1 下载压缩包
下载地址:https://github.com/apache/dubbo-admin/releases
2.2 下载完成后解压
2.3 修改application.properties
进入dubbo-admin-serversrcmainresources目录,修改application.properties,设置zookeeper地址dubbo.registry.address
这里默认就是127.0.0.1:2181,无需修改
## ...其他配置...#server.port=38080dubbo.protocol.port=30880dubbo.application.qos-port=32222# centers in dubbo, if you want to add parameters, please add them to the urladmin.registry.address=zookeeper://127.0.0.1:2181admin.config-center=zookeeper://127.0.0.1:2181admin.metadata-report.address=zookeeper://127.0.0.1:2181## ...其他配置...#admin.root.user.name=rootadmin.root.user.password=root## ...其他配置...##dubbo configdubbo.application.name=dubbo-admindubbo.registry.address=${admin.registry.address}## ...其他配置...#
2.4 打包dubbo-admin
根目录下执行Maven打包命令
mvn clean package -Dmaven.test.skip=true
第一次打包时间会有点久,等到出现BUILD SUCCESS,表示打包成功
2.5 启动dubbo-admin
进入dubbo-admin-servertarget,启动dubbo-admin-server-0.6.0.jar服务
注:启动dubbo-admin服务时,一定要确保ZooKeeper服务是启动成功的
java -jar dubbo-admin-server-0.6.0.jar
2.6 测试
浏览器访问127.0.0.1:38080
录入用户名和密码,application.properties中默认配置的都是 root,登录成功后,进入主页
3 新建服务提供者
新建module spring-boot-dubbo-provider
3.1 导入依赖
<!-- dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.2.11</version> </dependency> <!-- zookeeper 客户端 --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- zookeeper 服务端 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.9.2</version> </dependency> <!-- zookeeper 服务端相关依赖 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>5.6.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>5.6.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-x-discovery</artifactId> <version>5.6.0</version> </dependency>
3.2 配置dubbo
#访问端口server: port: 8090#dubbo: #服务应用名字 application: name: dubbo-provider #注册中心地址 registry: address: zookeeper://127.0.0.1:2181 #需注册的服务 scan: base-packages: cn.wbnull.springbootdemo.service
3.3 新建服务
package cn.wbnull.springbootdemo.service;public interface UserInfoService { public String getUserInfo();}
服务实现类
package cn.wbnull.springbootdemo.service;import org.apache.dubbo.config.annotation.DubboService;import org.springframework.stereotype.Service;@DubboService@Servicepublic class UserInfoServiceImpl implements UserInfoService { @Override public String getUserInfo() { return "name:zhangsan;age:18"; }}
使用@DubboService后,可以被扫描到,在项目已启动就自动注册到注册中心
注意:@Service在dubbo包下也有一个,不要用错了
3.4 测试
启动服务,服务启动成功后,可以在Dubbo-Admin中看到注册的服务
查看详情,可以看到注册的服务的接口等信息
4 新建服务消费者
新建module spring-boot-dubbo-consumer
4.1 导入依赖
与3.1中服务提供者spring-boot-dubbo-provider导入依赖包相同
4.2 配置dubbo
#访问端口server: port: 8091#dubbo: #消费者名字 application: name: dubbo-consumer #注册中心地址 registry: address: zookeeper://127.0.0.1:2181
4.3 新建服务
package cn.wbnull.springbootdemo.service;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.stereotype.Service;@Servicepublic class UserService { /** * 使用服务提供者提供的服务,需要先从注册中心中获取服务 */ @DubboReference public UserInfoService userInfoService; public String getUserInfo() { return userInfoService.getUserInfo(); }}
要使用服务提供者提供的服务,需要先从注册中心中获取服务,获取服务使用@DubboReference注解。
这里@DubboReference注解跟@Autowired注解用法是类似的,只是@Autowired注解是自动装配本地的服务,@DubboReference是远程引用服务提供者的服务。
在使用@DubboReference注解远程引用时,会发现本模块中并没有UserInfoService服务,无法使用,有两种方法解决
-
1、使用pom坐标
-
2、定义路径相同的接口名
以方法2为例,新建UserInfoService
package cn.wbnull.springbootdemo.service;public interface UserInfoService { public String getUserInfo();}
4.4 测试
新建测试类
@SpringBootTest(classes = DubboConsumerApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)public class DubboConsumerApplicationTest { @Autowired public UserService userService; @Test public void contextLoads() { String userInfo = userService.getUserInfo(); System.out.println("用户信息:" + userInfo); }}
启动测试类,控制台上成功打印
至此,服务消费者成功从注册中心中获取到了服务提供者提供的服务,并成功调用其接口。
4.5 服务关系
我们再直接启动spring-boot-dubbo-consumer服务,服务启动成功后,可以在Dubbo-Admin中看到消费者和提供者的服务调用关系
Spring Boot整合Dubbo+Zookeeper成功,且测试通过
CSDN:https://blog.csdn.net/dkbnull/article/details/137616028
知乎:https://zhuanlan.zhihu.com/p/69181444
本篇文章来源于微信公众号: 程序员null
微信扫描下方的二维码阅读本文
Comments NOTHING