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

posted @   Silentims  阅读(3478)  评论(0编辑  收藏  举报
编辑推荐:
· .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
点击右上角即可分享
微信分享提示