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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM