通過優銳課核心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干貨