通過優銳課核心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接口
首先定義一個接口:
public interface EchoService {
String echo(String message);
}
該接口將向遠程客戶端公開。 這裏的提示是將此接口打包到第二或第三方工件(jar)中,以便該jar可用於spring-cloud-dubbo-sample-api。
實施Dubbo服務
在Maven中創建一個項目
讓我們用artifactIdId spring-cloud-dubbo-server-sample創建一個Maven項目。 然後,將依賴項添加到pom.xml中。。
<dependencies>
<!-- Sample API -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<!-- Dubbo Spring Cloud Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- Spring Cloud Nacos Service Discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</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服務註冊表工件
在繼續之前,我們需要在定義中添加一個版本:
<dependencyManagement>
<dependencies>
<!-- Spring Cloud Alibaba dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
服務代碼實施
這是實現的Java代碼:
@org.apache.dubbo.config.annotation.Service
class EchoServiceImpl implements EchoService {
@Override
public String echo(String message) {
return "[echo] Hello, " + message;
}
}
@ org.apache.dubbo.config.annotation.Service註釋將其聲明爲Dubbo服務。
配置Dubbo服務
建議的公開服務的方法是使用@DubboComponentScanannotation。
該配置涉及兩個部分:Dubbo和Spring Cloud。
dubbo:
scan:
base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap
protocol:
name: dubbo
# -1 means self-defined
port: -1
registry:
address: spring-cloud://localhost
spring:
application:
name: spring-cloud-alibaba-dubbo-server
main:
allow-bean-definition-overriding: true
cloud:
nacos:
# Nacos
discovery:
server-addr: 127.0.0.1:8848
Spring Boot應用程序類
這與其他Spring Boot應用程序類相同:
@EnableDiscoveryClient
@EnableAutoConfiguration
public class DubboSpringCloudServerBootstrap {
public static void main(String[] args) {
SpringApplication.run(DubboSpringCloudServerBootstrap.class);
}
}
這裏唯一值得一提的是,我們應該在此之前啓動Nacos服務,以便Nacos可以發現該服務。
實施Dubbo客戶
創建spring-cloud-dubbo-client-sample Maven項目
與服務端配置類似,我們需要指定依賴項:
<dependencyManagement>
<dependencies>
<!-- Spring Cloud Alibaba dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Sample API -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<!-- Dubbo Spring Cloud Starter -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- Spring Cloud Nacos Service Discovery -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
與服務端的主要區別在於客戶端將是一個使用spring-boot-starter-web的Web Servlet應用程序。
配置客戶端
與服務端類似,配置分爲兩個部分:Dubbo和Spring。
dubbo:
registry:
address: spring-cloud://localhost
cloud:
subscribed-services: spring-cloud-alibaba-dubbo-server
spring:
application:
# Dubbo
name: spring-cloud-alibaba-dubbo-client
main:
# Spring Boot 2.1
allow-bean-definition-overriding: true
cloud:
nacos:
# Nacos
discovery:
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代碼
分爲兩個步驟:
@EnableDiscoveryClient
@EnableAutoConfiguration
@RestController
public class DubboSpringCloudClientBootstrap {
@Reference
private EchoService echoService;
@GetMapping("/echo")
public String echo(String message) {
return echoService.echo(message);
}
public static void main(String[] args) {
SpringApplication.run(DubboSpringCloudClientBootstrap.class);
}
}
由於這是一個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乾貨