SpringBoot整合Zookeepr+Dubbo实现服务注册和发现
本文共 5,115 字,预计阅读时间 17 分钟
关于Zookeeper和Dubbo的原理在此略,请参考链接。默认已在本地安装了Zookeeper
1.服务提供者开发
1)新建一个SpringBoot的项目,导入依赖
<dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入springboot整合dubbo的jar包--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
2)在yml配置dubbo相关信息
server: port: 8001 dubbo: application: #dubbo的应用名称 name: dubbo-provider protocol: #协议名称 name: dubbo #协议端口 port: 20880 registry: #zk服务的地址 address: zookeeper://127.0.0.1:2181 provider: #服务的超时时间,单位是ms,默认是1000 timeout: 20000
由于dubbo是用于远程调用的,故需配置服务注册中心的相关信息
3)新建User实体类
package com.zys.entity; import lombok.Data; import java.io.Serializable; @Data public class User implements Serializable { private String name; private String pwd; }
注意:若要在dubbo中传递对象,那么此对象必须进行序列化,否则会报错。
4)新建service类,用于业务逻辑的接口类
package com.zys.service; import com.zys.entity.User; import java.util.List; public interface UserService { List<User> getList(); }
这里以模拟查询用户信息为例。
5)新建实现类,实现业务接口类
package com.zys.service.impl; import com.zys.entity.User; import com.zys.service.UserService; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service @com.alibaba.dubbo.config.annotation.Service public class UserServiceImpl implements UserService { @Override public List<User> getList() { List<User> list = new ArrayList<>(); for (int i = 1; i <= 5; i++) { User user = new User(); user.setName("张三" + i); user.setPwd("123" + i); list.add(user); } return list; } }
需要注意是的,这里用了两个@Service注解,但各自有作用。重要的是要引入dubbo的@service注解。只有使用此注解的类,才会被注册到zk中。因此需要使用远程调用的类再加上dubbo的@service注解即可,不需要远程调用的直接使用原来的@Service注解。
6)新建controller层,测试业务接口
package com.zys.controller; import com.zys.entity.User; import com.zys.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/get") public List<User> getList() { return userService.getList(); } }
这个controller的作用除了测试业务接口外,还可与服务消费者端的controller进行对比。
7)给启动类添加注解@EnableDubbo
2.服务消费者开发
1)新建一个SpringBoot的项目,导入依赖
<dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入springboot整合dubbo的jar包--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>
2)在yml配置dubbo相关信息
server: port: 80 dubbo: application: #dubbo的应用名称 name: dubbo-consumer registry: #zk服务的地址 address: zookeeper://127.0.0.1:2181
这里只需要配置zk的地址和dubbo的应用名称。
3)新建service类
package com.zys.service; import com.zys.entity.User; import java.util.List; public interface UserService { List<User> getList(); }
此类必须和服务提供者中添加dubbo的@Service注解的接口类一致,包名也要一致,要调用的方法也需保持一致。这些服务都会注册到zk中,dubbo通过名称去查找并调用。
5)新建controller层,测试服务接口
package com.zys.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.zys.entity.User; import com.zys.service.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class TestController { @Reference private UserService userService; @GetMapping("/test") public List<User> test() { return userService.getList(); } }
在注入服务时使用的是dubbo的@Reference注解,只有通过这个注解才能调用到服务。
5)给启动类添加注解@EnableDubbo
6)先启动zk服务,再启动服提供者,最后启动服务消费者,先访问http://localhost:8001/get,返回正确信息:
调用http://localhost/test也会返回正确的信息,至此服务注册与调用已完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!