SpringBoot整合Dubbo+Zookeeper

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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月前
|
Dubbo Java 应用服务中间件
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
45 0
|
3月前
|
Dubbo Java 应用服务中间件
Spring Boot Dubbo 构建分布式服务
Spring Boot Dubbo 构建分布式服务
47 0
|
1月前
|
SQL 监控 Java
nacos常见问题之dubbo+nacos+springboot3的native打包成功后运行出现异常如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
36 2
|
1月前
|
Dubbo Java 应用服务中间件
Spring Boot整合Dubbo+Zookeeper实现RPC调用
Spring Boot整合Dubbo+Zookeeper实现RPC调用 技术栈说明 Dubbo:Dubbo作为RPC框架,能在多个服务之间实现远程服务的调用。比如有两个独立的微服务A和B,A服务想要调用B服务时,因为两者不在同个内存空间中,不能直接调用,所以可以通过Dubbo实现这点。 功能和Spring Cloud的Feign相同,两者都是应用于微服务架构的远程调用框架 Zookeeper:作为注册中心去管理Dubbo服务,这点和Eureka、Nacos相同。 概述 通过一个示例说明Dubbo+Zookeeper在Spring Boot中的应用。 现有两个服务provider和con
116 4
|
2月前
|
XML 资源调度 Dubbo
深度剖析dubbo和zookeeper关系
当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架和流动式的架构就凸显出来了。
17 0
|
3月前
|
Dubbo Java 应用服务中间件
Dubbo 3.x结合Zookeeper实现远程服务基本调用
ZooKeeper和Dubbo是两个在分布式系统中常用的开源框架,它们可以协同工作,提供服务注册与发现、分布式协调等功能。
|
5月前
|
负载均衡 Dubbo 应用服务中间件
微服务技术系列教程(31) - Dubbo-原理及负载均衡分析
微服务技术系列教程(31) - Dubbo-原理及负载均衡分析
55 0
|
5月前
|
Dubbo Java 应用服务中间件
微服务技术系列教程(30) - Dubbo-SpringCloud与Dubbo区别
微服务技术系列教程(30) - Dubbo-SpringCloud与Dubbo区别
47 0
|
5月前
|
Dubbo Java 应用服务中间件
阿里新框架干掉微服务,换下Dubbo,Spring CloudAlibaba王者降临
tm快了,不知不觉中金九银十的秋招已经快结束了,不少同学现在已经拿到offer了吧~现在的面试可是越来越难了,动不动就是“互联网三高”。
阿里新框架干掉微服务,换下Dubbo,Spring CloudAlibaba王者降临
|
4月前
|
Dubbo Java 应用服务中间件
阿里巴巴资深架构师深度解析微服务架构设计之SpringCloud+Dubbo
软件架构是一个包含各种组织的系统组织,这些组件包括Web服务器,应用服务器,数据库,存储,通讯层),它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。

热门文章

最新文章