深度學習帶有Dubbo的Spring Cloud Alibaba


通過優銳課核心java學習筆記中,我們可以看到,碼了很多專業的相關知識, 分享給大家參考學習。

看一下如何在阿里巴巴的Spring Cloud實現中使用這個流行的RPC框架。

Spring Cloud Alibaba

Spring Cloud Alibaba是Alibaba Cloud的Spring Cloud版本。 它由幾個阿里巴巴的開源項目Nacos,Sentinel和RocketMQ以及幾個阿里雲原生商業產品組成,以增強用戶在阿里雲上的體驗。 Spring Cloud Alibaba的新版本還將提供Dubbo作為RPC選擇。

Dubbo是一個經過嚴格實踐的RPC框架。 在另一篇文章中,我演示了如何將其與注釋一起使用。 該示例使用的是Spring Boot。 Dubbo與Spring Boot緊密集成。 將Dubbo放在Spring Cloud Alibaba上似乎很自然。

在本文中,我們將使用一個簡單的echo示例來說明在Spring Cloud Alibaba上使用Dubbo的步驟。

定義Dubbo接口

首先定義一個接口:

1 public interface EchoService {
2 
3     String echo(String message);
4 
5 }

 

 

該接口將向遠程客戶端公開。 這里的提示是將此接口打包到第二或第三方工件(jar)中,以便該jar可用於spring-cloud-dubbo-sample-api。

實施Dubbo服務

Maven中創建一個項目

讓我們用artifactIdId spring-cloud-dubbo-server-sample創建一個Maven項目。 然后,將依賴項添加到pom.xml中。

 1 <dependencies>
 2 
 3     <!-- Sample API -->
 4 
 5     <dependency>
 6 
 7         <groupId>org.springframework.cloud</groupId>
 8 
 9         <artifactId>spring-cloud-dubbo-sample-api</artifactId>
10 
11         <version>${project.version}</version>
12 
13     </dependency>
14 
15     <!-- Spring Boot dependencies -->
16 
17     <dependency>
18 
19         <groupId>org.springframework.boot</groupId>
20 
21         <artifactId>spring-boot-actuator</artifactId>
22 
23     </dependency>
24 
25     <!-- Dubbo Spring Cloud Starter -->
26 
27     <dependency>
28 
29         <groupId>org.springframework.cloud</groupId>
30 
31         <artifactId>spring-cloud-starter-dubbo</artifactId>
32 
33     </dependency>
34 
35     <!-- Spring Cloud Nacos Service Discovery -->
36 
37     <dependency>
38 
39         <groupId>org.springframework.cloud</groupId>
40 
41         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
42 
43     </dependency>
44 
45 </dependencies>

 

 

在上面的pom.xml中:

  • spring-cloud-dubbo-sample-api:這是工件ID
  • spring-boot-actuator:這是Spring Boot生產就緒的工件
  • spring-cloud-starter-dubbo:這是Dubbo Spring Cloud Starter工件
  • spring-cloud-starter-alibaba-nacos-discovery:這是Nacos Spring Cloud服務注冊表工件

在繼續之前,我們需要在定義中添加一個版本:

 1 <dependencyManagement>
 2 
 3     <dependencies>
 4 
 5         <!-- Spring Cloud Alibaba dependencies -->
 6 
 7         <dependency>
 8 
 9             <groupId>org.springframework.cloud</groupId>
10 
11             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
12 
13             <version>0.9.0.RELEASE</version>
14 
15             <type>pom</type>
16 
17             <scope>import</scope>
18 
19         </dependency>
20 
21     </dependencies>
22 
23   </dependencyManagement>

 

 

服務代碼實施

這是實現的Java代碼:

 1 @org.apache.dubbo.config.annotation.Service
 2 
 3 class EchoServiceImpl implements EchoService {
 4 
 5     @Override
 6 
 7     public String echo(String message) {
 8 
 9         return "[echo] Hello, " + message;
10 
11     }
12 
13 }

 

 

@ org.apache.dubbo.config.annotation.Service注釋將其聲明為Dubbo服務。

配置Dubbo服務

建議的公開服務的方法是使用@DubboComponentScanannotation。

該配置涉及兩個部分:Dubbo和Spring Cloud。

 1 dubbo:
 2 
 3   scan:
 4 
 5     base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap
 6 
 7   protocol:
 8 
 9     name: dubbo
10 
11     # -1 means self-defined
12 
13     port: -1
14 
15   registry:
16 
17     address: spring-cloud://localhost
18 
19 spring:
20 
21   application:
22 
23     name: spring-cloud-alibaba-dubbo-server
24 
25   main:
26 
27     allow-bean-definition-overriding: true
28 
29   cloud:
30 
31     nacos:
32 
33       # Nacos
34 
35       discovery:
36 
37         server-addr: 127.0.0.1:8848

 

 

Spring Boot應用程序類

這與其他Spring Boot應用程序類相同:

 1 @EnableDiscoveryClient
 2 
 3 @EnableAutoConfiguration
 4 
 5 public class DubboSpringCloudServerBootstrap {
 6 
 7     public static void main(String[] args) {
 8 
 9         SpringApplication.run(DubboSpringCloudServerBootstrap.class);
10 
11     }
12 
13 }

 

 

這里唯一值得一提的是,我們應該在此之前啟動Nacos服務,以便Nacos可以發現該服務。

實施Dubbo客戶

創建spring-cloud-dubbo-client-sample Maven項目

與服務端配置類似,我們需要指定依賴項:

 1 <dependencyManagement>
 2 
 3     <dependencies>
 4 
 5         <!-- Spring Cloud Alibaba dependencies -->
 6 
 7         <dependency>
 8 
 9             <groupId>org.springframework.cloud</groupId>
10 
11             <artifactId>spring-cloud-alibaba-dependencies</artifactId>
12 
13             <version>0.9.0.RELEASE</version>
14 
15             <type>pom</type>
16 
17             <scope>import</scope>
18 
19         </dependency>
20 
21     </dependencies>
22 
23 </dependencyManagement>
24 
25 <dependencies>
26 
27     <!-- Sample API -->
28 
29     <dependency>
30 
31         <groupId>org.springframework.cloud</groupId>
32 
33         <artifactId>spring-cloud-dubbo-sample-api</artifactId>
34 
35         <version>${project.version}</version>
36 
37     </dependency>
38 
39     <!-- Spring Boot dependencies -->
40 
41     <dependency>
42 
43         <groupId>org.springframework.boot</groupId>
44 
45         <artifactId>spring-boot-starter-web</artifactId>
46 
47     </dependency>
48 
49     <dependency>
50 
51         <groupId>org.springframework.boot</groupId>
52 
53         <artifactId>spring-boot-actuator</artifactId>
54 
55     </dependency>
56 
57     <!-- Dubbo Spring Cloud Starter -->
58 
59     <dependency>
60 
61         <groupId>org.springframework.cloud</groupId>
62 
63         <artifactId>spring-cloud-starter-dubbo</artifactId>
64 
65     </dependency>
66 
67     <!-- Spring Cloud Nacos Service Discovery -->
68 
69     <dependency>
70 
71         <groupId>org.springframework.cloud</groupId>
72 
73         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
74 
75     </dependency>
76 
77 </dependencies>
78 
79  

 

與服務端的主要區別在於客戶端將是一個使用spring-boot-starter-web的Web Servlet應用程序。

配置客戶端

與服務端類似,配置分為兩個部分:Dubbo和Spring。

 1 dubbo:
 2 
 3   registry:
 4 
 5     address: spring-cloud://localhost
 6 
 7   cloud:
 8 
 9     subscribed-services: spring-cloud-alibaba-dubbo-server
10 
11 spring:
12 
13   application:
14 
15     # Dubbo
16 
17     name: spring-cloud-alibaba-dubbo-client
18 
19   main:
20 
21     # Spring Boot 2.1
22 
23     allow-bean-definition-overriding: true
24 
25   cloud:
26 
27     nacos:
28 
29       # Nacos
30 
31       discovery:
32 
33         server-addr: 127.0.0.1:8848

 

 

在這里,我們通過將dubbo.cloud.subscribed-services綁定到spring-cloud-dubbo-server-sample來指定要使用的服務。

  • dubbo.cloud.subscribed-services:要訂閱多個服務,請使用“,”作為分隔符。 

由於它是一個Web應用程序,因此默認端口為8080。 可以通過修改server.port屬性來更改。

Spring Boot應用程序類和實現Java代碼

分為兩個步驟:

 1 @EnableDiscoveryClient
 2 
 3 @EnableAutoConfiguration
 4 
 5 @RestController
 6 
 7 public class DubboSpringCloudClientBootstrap {
 8 
 9     @Reference
10 
11     private EchoService echoService;
12 
13     @GetMapping("/echo")
14 
15     public String echo(String message) {
16 
17         return echoService.echo(message);
18 
19     }
20 
21     public static void main(String[] args) {
22 
23         SpringApplication.run(DubboSpringCloudClientBootstrap.class);
24 
25     }
26 
27 }

 

 

由於這是一個Web客戶端,因此我們可以使用curl進行嘗試。 如果我們跑

curl http://127.0.0.1:8080/echo?message=yourmessage

 

或者我們可以運行Java客戶端來獲得相同的結果。

We should see the result [echo] Hello, yourmessage

 

結論

Spring Cloud阿里巴巴現在有兩個發行版,其中包括Dubbo。 它們是與Spring Cloud Finchley兼容的0.2.2版本和與Spring Cloud Greenwich兼容的0.9.0版本。 無論是嘗試適應Spring Cloud阿里巴巴的Dubbo用戶,還是相反,經驗都應該是無縫的。

 

> 喜歡這篇文章的可以點個贊,歡迎大家留言評論,記得關注我,每天持續更新技術干貨、職場趣事、海量面試資料等等
 > 如果你對java技術很感興趣也可以交流學習,共同學習進步。 
> 不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代

文章寫道這里,歡迎完善交流。最后奉上近期整理出來的一套完整的java架構思維導圖,分享給大家對照知識點參考學習。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干貨


免責聲明!

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



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