之前的文章中,無論我們學習 Eureka、Consul 還是 Nacos,負責服務間通信的功能都是由 Ribbon 來完成的,接下來我們使用 Dubbo 來替換 Ribbon,
本文作者:哈嘍沃德先生,歡迎關注哈嘍沃德先生
一、聚合工程
dubbo-demo 聚合工程,SpringBoot 2.3.0.RELEASE、Spring Cloud Hoxton.SR5,
專案結構如下圖,簡單介紹一下:
service-api:服務介面
product-service:商品服務,服務提供者,提供了 /product/list 介面
order-service:訂單服務,服務消費者,遠程呼叫商品服務

1、依賴關系
dubbo-demo 的 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> <!-- 專案坐標地址 --> <groupId>com.example</groupId> <!-- 專案模塊名稱 --> <artifactId>dubbo-demo</artifactId> <packaging>pom</packaging> <!-- 專案版本名稱 快照版本SNAPSHOT、正式版本RELEASE --> <version>1.0-SNAPSHOT</version> <modules> <module>service-api</module> <module>product-service</module> <module>order-service</module> </modules> <!-- 繼承 spring-boot-starter-parent 依賴 --> <!-- 使用繼承方式,實作復用,符合繼承的都可以被使用 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE</version> </parent> <!-- 集中定義依賴組件版本號,但不引入, 在子工程中用到宣告的依賴時,可以不加依賴的版本號, 這樣可以統一管理工程中用到的依賴版本 --> <properties> <!-- Spring Cloud Hoxton.SR5 依賴 --> <spring-cloud.version>Hoxton.SR5</spring-cloud.version> <!-- spring cloud alibaba 依賴 --> <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version> </properties> <!-- 專案依賴管理 父專案只是宣告依賴,子專案需要寫明需要的依賴(可以省略版本資訊) --> <dependencyManagement> <dependencies> <!-- spring cloud 依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring cloud alibaba 依賴 --> <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> </project>
service-api 的 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"> <parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>service-api</artifactId> <dependencies> <!-- lombok 依賴 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> </project>
product-service 需要依賴 Nacos 和 Dubbo 的依賴,還有 service-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"> <!-- 繼承父依賴 --> <parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>product-service</artifactId> <!-- 專案依賴 --> <dependencies> <!-- spring cloud alibaba nacos discovery 依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- spring cloud alibaba dubbo 依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dubbo</artifactId> </dependency> <!-- spring boot web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- service-api 依賴 --> <dependency> <groupId>com.example</groupId> <artifactId>service-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- spring boot test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
order-service 需要依賴 Nacos 和 Dubbo 的依賴,還有 service-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"> <!-- 繼承父依賴 --> <parent> <artifactId>dubbo-demo</artifactId> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>order-service</artifactId> <!-- 專案依賴 --> <dependencies> <!-- spring cloud alibaba nacos discovery 依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- spring cloud alibaba dubbo 依賴 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dubbo</artifactId> </dependency> <!-- spring boot web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- service-api 依賴 --> <dependency> <groupId>com.example</groupId> <artifactId>service-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- spring boot test 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
二、定義服務介面
我們在 service-api 模塊中定義物體類和服務介面資訊,
1、物體類
Product.java
package com.example.product.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; @Data @NoArgsConstructor @AllArgsConstructor public class Product implements Serializable { private Integer id; private String productName; private Integer productNum; private Double productPrice; }
Order.java
package com.example.product.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor public class Order implements Serializable { private Integer id; private String orderNo; private String orderAddress; private Double totalPrice; private List<Product> productList; }
2、服務介面
package com.example.product.service; import com.example.product.pojo.Product; import java.util.List; /** * 商品服務 */ public interface ProductService { /** * 查詢商品串列 * * @return */ List<Product> selectProductList(); }
三、定義服務提供者
組態檔
組態檔需要配置 Nacos 注冊中心和 Dubbo 相關資訊,核心配置如下:
server: port: 7070 # 埠 spring: application: name: product-service # 應用名稱 # 配置 Nacos 注冊中心 cloud: nacos: discovery: enabled: true # 如果不想使用 Nacos 進行服務注冊和發現,設定為 false 即可 server-addr: 127.0.0.1:8848 # Nacos 服務器地址,單機版 # Dubbo dubbo: # 提供方應用資訊,用于計算依賴關系 application: name: product-service # 使用 nacos 注冊中心暴露服務地址 registry: protocol: nacos address: spring-cloud://localhost # 用 dubbo 協議在 20880 埠暴露服務 protocol: name: dubbo port: 20880 # 掃描需要暴露的服務,可以被 @EnableDubbo 注解替代 #scan: # base-packages: com.example.service
四、定義服務消費者
省略
五、測驗
省略,如需學習或者獲取資料完整的springcloud alibaba視頻教程和java微服務課程,請點擊此處,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59814.html
標籤:Java
