javascript
7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用
概述
Apache Dubbo 是一款高性能的、基于Java的開源RPC框架,它提供了以下特性:
- 基于接口的遠程方法調用
- 智能負載均衡
- 服務自動注冊和發現
- 高可擴展性
- 運行期流量調度
- 可視化的服務治理
架構
(0)provider基于dubbo容器啟動
(1)provider注冊到注冊中心(Nacos)
(2)consumer訂閱注冊中心的服務變化
(3)注冊中心將服務變化結果異步地通知給consumer
(4)consumer直接調用provider接口
(5)monitor監控流量請求數據
Spring Cloud Alibaba 整合 Dubbo
創建主工程
創建一個空的工程,pom配置如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version></parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version><properties><project.version>1.0-SNAPSHOT</project.version><spring-cloud.version>Greenwich.SR6</spring-cloud.version><spring-cloud-alibaba.version>2.1.3.RELEASE</spring-cloud-alibaba.version></properties><modules><module>hello-dubbo-provider</module><module>hello-dubbo-consumer</module></modules><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Dubbo --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!-- Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies> </project>創建provider子工程:hello-dubbo-provider
在alibaba-dubbo工程下,創建子工程,pom.xml如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version><relativePath>../pom.xml</relativePath></parent><artifactId>hello-dubbo-provider</artifactId><packaging>pom</packaging><modules><module>hello-dubbo-provider-api</module><module>hello-dubbo-provider-service</module></modules> </project>在hello-dubbo-provider工程下,創建hello-dubbo-provider子工程。目的是定義接口,后續consumer會引用該工程,然后就能直接調用provider借口了
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>hello-dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-provider-api</artifactId><packaging>jar</packaging></project>創建接口類EchoService:
package com.train.dubbo.provider.api;public interface EchoService {String echo(String name); }這樣api工程就完成了,很簡單
在hello-dubbo-provider工程下,創建hello-dubbo-provider-service子工程。該工程是api工程的具體實現,因此必須依賴上一步創建的api工程
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>hello-dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-provider-service</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.train</groupId><artifactId>hello-dubbo-provider-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies> </project>創建EchoServiceImpl實現EchoService接口
package com.train.dubbo.provider.service;import com.train.dubbo.provider.api.EchoService; import org.apache.dubbo.config.annotation.Service;@Service(version = "1.0.0") public class EchoServiceImpl implements EchoService {@Overridepublic String echo(String name) {return "Dubbo Hello:" + name;} }注意:@Service注解必須引用dubbo的Service,而不是spring,不要弄錯了
創建Application啟動類
@SpringBootApplication public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);} }配置application.yml,前提必須安裝好nacos,還沒安裝的童鞋參考前面的文章
spring:application:name: dubbo-providermain:allow-bean-definition-overriding: truecloud:nacos:discovery:server-addr: 192.168.25.131:8848dubbo:scan:base-packages: com.train.dubbo.provider.serviceprotocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848 server:port: 8010整個provider工程結構如下
啟動provider-service,然后查看Nacos,確認服務是否注冊
在主工程下創建hello-dubbo-consumer消費者工程,因為要消費provider接口,所以依賴provider-api工程
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.train</groupId><artifactId>alibaba-dubbo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>hello-dubbo-consumer</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.train</groupId><artifactId>hello-dubbo-provider-api</artifactId><version>${project.parent.version}</version></dependency></dependencies> </project>創建controller接口以便測試
@RestController public class EchoController {@Reference(version = "1.0.0")private EchoService echoService;@GetMapping("/echo/{name}")public String echo(@PathVariable String name){return echoService.echo(name);} }創建啟動類
@SpringBootApplication public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class,args);} }配置application.yml
server:port: 8020dubbo:protocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848scan:base-packages: com.train.dubbo.consumer.controllercloud:subscribed-services: dubbo-provider spring:application:name: dubbo-consumercloud:nacos:discovery:server-addr: 192.168.25.131:8848main:allow-bean-definition-overriding: true然后同樣啟動consumer工程,再確認Nacos
附上整個工程結構:
測試
在瀏覽器輸入http://localhost:8020/echo/zhangsan,能正常輸出provider-service實現的接口內容,就說明正常運行
總結
以上是生活随笔為你收集整理的7.Spring Cloud Alibaba教程:整合Dubbo实现RPC调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven中packaging的三个属性
- 下一篇: 8.Spring Cloud Aliba