springboot 整合 dubbo 教程(注解方式) + 新版 dubbo admin 使用教程
版本:
Java :1.8
Spring Boot :2.2.10
Dubbo Spring Boot :0.2.0
项目结构:
-
api 模块——接口、实体等定义
-
provider 模块——提供者
-
consumer 模块——消费者
项目地址:
Github 地址:https://github.com/Silentims/springboot-dubbo
一、父工程项目 Dubbo:
1. 在 IDEA 中新建一个 SpringBoot 初始化项目
2. 给项目起名,使用 jdk1.8版本
3. 选择 springboot 的版本:
4. 删除多余不用文件目录
5. 编辑 pom.xml 文件,添加打包方式为 pom,增加子模块 module 引用(后面步骤一一创建),完整 xml 文件如下
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.2.10.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>dubbo-boot</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>dubbo-boot</name> 15 <description>Spring Boot整合Dubbo(注解方式)</description> 16 17 <!--打包方式:pom--> 18 <packaging>pom</packaging> 19 20 <properties> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <!--子模块引用--> 25 <modules> 26 <module>dubbo-api</module> 27 <module>dubbo-consumer</module> 28 <module>dubbo-provider</module> 29 </modules> 30 31 <dependencies> 32 <dependency> 33 <groupId>org.springframework.boot</groupId> 34 <artifactId>spring-boot-starter</artifactId> 35 </dependency> 36 37 <dependency> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-starter-test</artifactId> 40 <scope>test</scope> 41 <exclusions> 42 <exclusion> 43 <groupId>org.junit.vintage</groupId> 44 <artifactId>junit-vintage-engine</artifactId> 45 </exclusion> 46 </exclusions> 47 </dependency> 48 </dependencies> 49 50 <build> 51 <plugins> 52 <plugin> 53 <groupId>org.springframework.boot</groupId> 54 <artifactId>spring-boot-maven-plugin</artifactId> 55 </plugin> 56 </plugins> 57 </build> 58 59 </project>
二、api 模块
1. 创建子模块(与第一步一样创建流程)
2. 删除多余的文件目录,也删除主启动类,该模块主要定义接口,实体,公共资源,这里演示整合 dubbo 的demo 接口,代码目录结构如下
3. 修改pom.xml 文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.2.10.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>dubbo-api</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>dubbo-api</name> 15 <description>Demo project for Spring Boot</description> 16 17 <!--打包方式:jar--> 18 <packaging>jar</packaging> 19 20 <properties> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter</artifactId> 28 </dependency> 29 30 <dependency> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-starter-test</artifactId> 33 <scope>test</scope> 34 <exclusions> 35 <exclusion> 36 <groupId>org.junit.vintage</groupId> 37 <artifactId>junit-vintage-engine</artifactId> 38 </exclusion> 39 </exclusions> 40 </dependency> 41 </dependencies> 42 43 <build> 44 <plugins> 45 <plugin> 46 <groupId>org.springframework.boot</groupId> 47 <artifactId>spring-boot-maven-plugin</artifactId> 48 </plugin> 49 </plugins> 50 </build> 51 52 </project>
4. 接口代码如下:
package com.example.dubbo.api.manager; /** * 接口定义 * @auth Jessy Heung * @date 2020-09-25 */ public interface DemoApi { /** * demo 方法 * @param name * @return */ String sayHello(String name); }
5. 完整的 api 模块,代码结构如下:
三、provider 模块
1. 创建子模块 dubbo-provider,与前面流程一样,创建后删除多余文件,文件目录如下:
2. 修改 pom.xml 文件,完整配置如下(注释的部分为新增的依赖):
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.2.10.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>dubbo-provider</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>dubbo-provider</name> 15 <description>Demo project for Spring Boot</description> 16 17 <!--打包方式:jar--> 18 <packaging>jar</packaging> 19 20 <properties> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter</artifactId> 28 </dependency> 29 30 <!-- dubbo provider 启动不成功的主要问题在这里,没有添加 spring-boot-starter-web 依赖,所以启动日志里一直没有显示 “o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8087 (http)” 这行日志输出 --> 31 <dependency> 32 <groupId>org.springframework.boot</groupId> 33 <artifactId>spring-boot-starter-web</artifactId> 34 </dependency> 35 36 <!-- 这个是定义的接口包,在 provider 和 consumer 都需要引用的 --> 37 <dependency> 38 <groupId>com.example</groupId> 39 <artifactId>dubbo-api</artifactId> 40 <version>0.0.1-SNAPSHOT</version> 41 </dependency> 42 43 <!--新增 dubbo 依赖--> 44 <dependency> 45 <groupId>com.alibaba.boot</groupId> 46 <artifactId>dubbo-spring-boot-starter</artifactId> 47 <version>0.2.0</version> 48 </dependency> 49 50 <dependency> 51 <groupId>org.springframework.boot</groupId> 52 <artifactId>spring-boot-starter-test</artifactId> 53 <scope>test</scope> 54 <exclusions> 55 <exclusion> 56 <groupId>org.junit.vintage</groupId> 57 <artifactId>junit-vintage-engine</artifactId> 58 </exclusion> 59 </exclusions> 60 </dependency> 61 </dependencies> 62 63 <build> 64 <plugins> 65 <plugin> 66 <groupId>org.springframework.boot</groupId> 67 <artifactId>spring-boot-maven-plugin</artifactId> 68 </plugin> 69 </plugins> 70 </build> 71 72 </project>
3. 修改 application 配置文件(这里我改成了 yml 文件格式)
1 server: 2 port: 8087 3 4 dubbo: 5 application: 6 # 这个 name 作为提供者展示(在 dubbo-admin 可视化界面看到的提供者名称就是这个) 7 name: dubbo-springboot-provider 8 # 应用所属者 9 owner: Jessy Heung 10 # 应用所属组织 11 organization: Jessy Heung 12 registry: 13 id: zookeeper-registry 14 # 注册中心协议 15 protocol: zookeeper 16 # 注册中心地址 此处采用本地 zk 注册,服务器的话写对应 ip 地址 17 address: zookeeper://127.0.0.1:2181 18 19 # dubbo协议在20880端口暴露服务 20 # 协议名称 21 protocol: 22 name: dubbo 23 # 协议端口 24 port: 20880 25 # 协议访问log 26 accesslog: dubbo-access.log 27 # 重试次数 28 provider: 29 retries: 0 30 # 超时时间 31 timeout: 3000 32 # 注册监控中心 33 monitor: 34 protocol: registry
4. 写服务实现代码,创建一个服务实现类,具体代码如下:
-
注意@service 注解为 dubbo 下的
1 package com.example.dubbo.provider.impl; 2 3 import com.alibaba.dubbo.config.annotation.Service; 4 import com.example.dubbo.api.manager.DemoApi; 5 import org.slf4j.Logger; 6 import org.slf4j.LoggerFactory; 7 8 @Service 9 public class DemoApiImpl implements DemoApi { 10 11 public static final Logger logger = LoggerFactory.getLogger(DemoApiImpl.class); 12 13 @Override 14 public String sayHello(String name) { 15 logger.info("【提供者】【服务实现】---请求参数 name :{}",name); 16 return "hello"+ name +"(Springboot 整合 Dubbo --采用注解方式)"; 17 } 18 }
5. 主启动类中,启动用 dubbo
1 package com.example.dubbo.provider; 2 3 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 7 @SpringBootApplication 8 @EnableDubbo //启用 dubbo 9 public class DubboProviderApplication { 10 11 public static void main(String[] args) { 12 SpringApplication.run(DubboProviderApplication.class, args); 13 } 14 15 }
6. 完整的文件目录结构:
四、consumer 模块
1. 创建子模块 dubbo-consumer(流程与 provider 一样,只是模块名称不一样)
2. 修改 pom.xml(与 provider 一样)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.2.10.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>dubbo-consumer</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>dubbo-consumer</name> 15 <description>Demo project for Spring Boot</description> 16 17 <!--打包方式:jar--> 18 <packaging>jar</packaging> 19 20 <properties> 21 <java.version>1.8</java.version> 22 </properties> 23 24 <dependencies> 25 <dependency> 26 <groupId>org.springframework.boot</groupId> 27 <artifactId>spring-boot-starter</artifactId> 28 </dependency> 29 30 <dependency> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-starter-test</artifactId> 33 <scope>test</scope> 34 <exclusions> 35 <exclusion> 36 <groupId>org.junit.vintage</groupId> 37 <artifactId>junit-vintage-engine</artifactId> 38 </exclusion> 39 </exclusions> 40 </dependency> 41 42 <!-- dubbo consumer 启动不成功的主要问题在这里,没有添加 spring-boot-starter-web 依赖,所以启动日志里一直没有显示 “o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8088 (http)” 这行日志输出 --> 43 <dependency> 44 <groupId>org.springframework.boot</groupId> 45 <artifactId>spring-boot-starter-web</artifactId> 46 </dependency> 47 48 <!-- 这个是定义的接口包,在 provider 和 consumer 都需要引用的 --> 49 <dependency> 50 <groupId>com.example</groupId> 51 <artifactId>dubbo-api</artifactId> 52 <version>0.0.1-SNAPSHOT</version> 53 </dependency> 54 55 <!--新增 dubbo 依赖--> 56 <dependency> 57 <groupId>com.alibaba.boot</groupId> 58 <artifactId>dubbo-spring-boot-starter</artifactId> 59 <version>0.2.0</version> 60 </dependency> 61 62 </dependencies> 63 64 <build> 65 <plugins> 66 <plugin> 67 <groupId>org.springframework.boot</groupId> 68 <artifactId>spring-boot-maven-plugin</artifactId> 69 </plugin> 70 </plugins> 71 </build> 72 73 </project>
3. 修改 application 配置文件(改为 yml 格式),主要是修改端口号,application 名称
1 server: 2 port: 8088 3 4 dubbo: 5 application: 6 # dubbo admin中消费者名称 7 name: dubbo-springboot-consumer 8 # 应用所属者 9 owner: Jessy Heung 10 # 应用所属组织 11 organization: Jessy Heung 12 registry: 13 id: zookeeper-registry 14 # 注册中心协议 15 protocol: zookeeper 16 # 注册中心地址 此处为本地 zk 注册 17 address: zookeeper://127.0.0.1:2181 18 19 # dubbo协议在20880端口暴露服务 20 # 协议名称 21 protocol: 22 name: dubbo 23 # 协议端口 24 port: 20880 25 # 协议访问log 26 accesslog: dubbo-access.log 27 # 重试次数 28 provider: 29 retries: 0 30 # 超时时间 31 timeout: 3000 32 # 注册监控中心 33 monitor: 34 protocol: registry
4. 服务层代码实现
1 package com.example.dubbo.consumer.service; 2 3 import com.alibaba.dubbo.config.annotation.Reference; 4 import com.example.dubbo.api.manager.DemoApi; 5 import org.slf4j.Logger; 6 import org.slf4j.LoggerFactory; 7 import org.springframework.stereotype.Service; 8 9 /** 10 * 消费者-服务层 11 * @auth Jessy Heung 12 * @date 2020-09-25 13 */ 14 @Service //此处为 spring 的注解 15 public class DemoService { 16 private static final Logger logger = LoggerFactory.getLogger(DemoService.class); 17 18 @Reference //dubbo 注解 19 private DemoApi demoApi; 20 21 public String sayHello(String name){ 22 logger.info("【消费者】【服务层】---请求参数 name :{}",name); 23 return demoApi.sayHello(name); 24 } 25 }
5. 控制层代码实现
1 package com.example.dubbo.consumer.controller; 2 3 import com.example.dubbo.consumer.service.DemoService; 4 import org.slf4j.Logger; 5 import org.slf4j.LoggerFactory; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RequestMethod; 9 import org.springframework.web.bind.annotation.ResponseBody; 10 import org.springframework.web.bind.annotation.RestController; 11 12 /** 13 * 消费者--控制层 14 * @auth Jessy Heung 15 * @date 2020-09-25 16 */ 17 @RestController 18 @RequestMapping("/demo") 19 public class DemoController { 20 21 private static Logger logger = LoggerFactory.getLogger(DemoController.class); 22 23 @Autowired 24 private DemoService demoService; 25 26 /** 27 * 打开浏览器,输入/demo/sayHello 28 * @return 29 */ 30 @RequestMapping(value = "/sayHello", method = RequestMethod.GET) 31 @ResponseBody 32 public String sayHello(){ 33 logger.info("【消费者】【控制层】---请求入口"); 34 return demoService.sayHello("Jessy"); 35 } 36 }
6. 主启动类中,启动用 dubbo
1 package com.example.dubbo.consumer; 2 3 import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 7 @SpringBootApplication 8 @EnableDubbo 9 public class DubboConsumerApplication { 10 public static void main(String[] args) { 11 SpringApplication.run(DubboConsumerApplication.class, args); 12 } 13 }
7. 完整文件目录结构
五、编译和部署 dubbo admin
1. 下载官方项目Git 克隆到本地,官方项目地址https://github.com/apache/dubbo-admin
git clone https://github.com/apache/dubbo-admin.git
2. 打开项目中的 README_ZH.md 文件,按照教程部署即可
3. 浏览器输入:localhost://8080访问,如下页面表示部署成功
六、启动项目,测试
1. 先启动 provider,后启动 consumer:
2. 访问地址 localhost:8088/demo/sayHello
七、查看 dubbo admin 中的服务调用情况
1. 查看服务信息
2. 查看服务调用关系
至此,springboot 整合 dubbo 采用注解的简单 demo 完成。
Github 项目地址:https://github.com/Silentims/springboot-dubbo
标签:
dubbo
, springboot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App