SpringBoot整合Dubbo+Zookeeper

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: SpringBoot整合Dubbo+Zookeeper

Dubbo简介

Apache Dubbo 官网:https://dubbo.apache.org/zh/


Apache Dubbo 是一款微服务开发框架,提供了 RPC【远程过程调用 Remote Procedure Call】通信与微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。8c8d1cc5f0f24608b063f0c769df5b0f.pngDubbo 提供的基础能力包括:

  • 服务发现
  • 流式通信
  • 负载均衡
  • 流量治理
  • ……

Zookeeper 简介

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境。8c73ae2d8bad490783a2c81484f8b84b.jpg

SpringBoot 项目整合

需要搭建 Zookeeper 环境:https://blog.csdn.net/qq_20185737/article/details/122202628

示例项目分为三个模块:

  • romantik:maven 多模块聚合项目
  • common:提取公共的实体类和服务接口,普通 Java 项目
  • app:服务消费者,远程调用 service 提供的服务,SpringBoot 项目
  • service:服务提供者,common 的服务接口具体实现,SpringBoot 项目
    804c51a0ab10cd0dafc75a9d930e8d6f.png

父模块

在父项目的 pom.xml 用 dependencyManagement 管理 Dubbo,Zookeeper 的依赖版本

<properties><java.version>1.8</java.version><dubbo.version>3.0.5</dubbo.version></properties><dependencyManagement><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><version>${dubbo.version}</version><exclusions>//排除冲突的依赖<exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions><type>pom</type></dependency></dependencies></dependencyManagement>

common 模块

在 common 模块的 pom.xml 中引入父项目的坐标

<parent><artifactId>romantic</artifactId><groupId>com.example</groupId><version>1.0.0</version></parent>

导入 service 模块和 app 模块公共依赖,这样在 service 模块和 app 模块中添加 common 模块依赖时就会导入这些依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency></dependencies>

service 模块

service 模块的 pom.xml 中添加对 common 模块的依赖和其他依赖的导入

<dependencies><!--common依赖--><dependency><groupId>com</groupId><artifactId>common</artifactId><version>1.0.0</version></dependency></dependencies>

配置 Service 模块的配置文件

#数据源配置spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTCusername: rootpassword: 123456#防止端口冲突server:
port: 8001#dubbo配置dubbo:
application:
#应用名称name: providerregistry:
#注册中心地址address: zookeeper://49.232.212.119:2181#超时时间,单位毫秒timeout: 30000#元中心地址metadata-report:
address: zookeeper://49.232.212.119:2181protocol:
#协议名称name: dubbo#协议端口port: 20880scan:
#扫描服务包的位置base-packages: com.service.impl

app 模块

app 模块的 pom.xml 中添加对 common 模块的依赖和其他依赖的导入

<dependencies><dependency><artifactId>dubbo-api</artifactId><groupId>com.example</groupId><version>1.0.0</version></dependency></dependencies>

配置 app 模块的配置文件

#防止端口冲突server:
port: 8002dubbo:
application:
#应用名称name: consumerregistry:
#注册中心地址address: zookeeper://49.232.212.119:2181timeout: 30000

测试

  1. 在 common 模块下编写 User 实体类
@Data@AllArgsConstructor@NoArgsConstructorpublicclassUserimplementsSerializable {
privateIntegerid;
privateStringusername;
privateStringpassword;
}
  1. 编写 User 的服务接口 UserService
publicinterfaceUserService {
UsergetUser();
}


  1. 在 Service 模块中进行实现 common 模块的服务接口 UserService
/*** @author Jie*/@DubboService(version="1.0")
publicclassUserServiceImplimplementsUserService {
/*** 实现 UserService 的 getUser() 方法* @return 返回一个 User*/@OverridepublicUsergetUser() {
returnnewUser(20,"喵喵","123456");
    }
}
  1. 使用 @DubboService 注解向注册中心注册服务


  1. 在 app 中编写 controller
@RestControllerpublicclassUserController {
@DubboReference(version="1.0")
privateUserServiceuserService;
@RequestMapping("/user")
publicUsergetUser(){
returnuserService.getUser();
    }
}
  1. 使用 @DubboReference 远程调用注册中心中的服务


  1. 启动两个模块,访问 localhost:8002/user,就可以看到执行成功了image.png


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
3天前
|
Dubbo Java 应用服务中间件
深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案
本文深入探讨了“dubbo+nacos+springboot3的native打包成功后运行出现异常”的原因及解决方案。通过检查GraalVM版本兼容性、配置反射列表、使用代理类、检查配置文件、禁用不支持的功能、查看日志文件、使用GraalVM诊断工具和调整GraalVM配置等步骤,帮助开发者快速定位并解决问题,确保服务的正常运行。
14 1
|
27天前
|
存储 负载均衡 监控
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
这篇文章是关于Apache Dubbo框架与Zookeeper的关系,以及如何下载、安装和启动Zookeeper的教程,包括解决启动过程中可能遇到的报错问题。
39 3
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
|
14天前
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
17 4
|
27天前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
63 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
3月前
|
Dubbo Java Nacos
【实战攻略】破解Dubbo+Nacos+Spring Boot 3 Native打包后运行异常的终极秘籍——从零开始彻底攻克那些让你头疼不已的技术难题!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但使用Dubbo+Nacos+Spring Boot 3进行GraalVM native打包后常遇运行异常。本文剖析此问题及其解决策略:确认GraalVM版本兼容性;配置反射列表以支持必要类和方法;采用静态代理替代动态代理;检查并调整配置文件;禁用不支持的功能;利用日志和GraalVM诊断工具定位问题;根据诊断结果调整GraalVM配置。通过系统排查方法,能有效解决此类问题,确保服务稳定运行。
93 0
|
4月前
|
存储 Java Spring
使用Spring Boot和Zookeeper实现服务协调
使用Spring Boot和Zookeeper实现服务协调
|
4月前
|
消息中间件 Java 数据库连接
理解java的springboot+mybatisplus+dubbo+nacos+kafka这一套技术栈
理解java的springboot+mybatisplus+dubbo+nacos+kafka这一套技术栈
86 0
|
6月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
20天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
44 2