nacos集成dubbo实现远程服务调用多服务端2
生活随笔
收集整理的這篇文章主要介紹了
nacos集成dubbo实现远程服务调用多服务端2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、版本選取、需求和項目簡述
- 1. 版本選取
- 2. 項目模塊說明
- 2. 需求說明
- 二、需求實戰-依賴初始化
- 2.1. 創建maven父工程EShopParent
- 2.2. 創建子模塊DubboApi
- 2.3. 創建服務端Stock-serv
- 2.4. 創建服務端product-serv
- 2.5. 創建消費端端Order-serv
- 三、需求實戰-代碼編寫
- 3.1. 創建公共接口
- 3.2. 扣庫存服務端編寫
- 3.3. 產品服務端編寫
- 3.5. 消費端編寫
- 四、需求實戰-配置編寫
- 4.1. 扣庫存服務端配置
- 4.2. 產品服務端配置
- 4.3.消費端配置
- 五、需求測試實戰
- 5.1. 啟動nacos
- 5.2. 啟動服務端
- 5.3. 啟消費端
- 5.4. 查看nacos
- 5.5. 項目模塊分布結構
- 六、測試實戰
- 6.1. 請求扣庫存鏈路
- 6.2. 請求產品鏈路
- 6.3. 常見的異常
一、版本選取、需求和項目簡述
1. 版本選取
| spring-cloud-alibaba | 2.2.6.RELEASE | 版本要對應 |
| spring-boot | 2.3.2.RELEASE | 版本要對應 |
| nacos | 1.4.2 | 版本要對應 |
| org.apache.dubbo | 2.7.8 | 版本要對應 |
2. 項目模塊說明
| EShopParent | 父工程 |
| DubboApi | 接口子模塊 |
| Order-serv | 訂單模塊 |
| Stock-serv | 扣庫存模塊 |
| product-serv | 產品模塊 |
2. 需求說明
訂單模塊調用扣庫存模塊完成庫庫存的業務
二、需求實戰-依賴初始化
2.1. 創建maven父工程EShopParent
<?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.gblfy</groupId><artifactId>EShopParent</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>Order-serv</module><module>Stock-serv</module><module>DubboApi</module><module>product-serv</module></modules><description>父工程 所有子工程需要依賴此工程</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version></parent><dependencies><!--springMVC啟動器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--nacos服務發現--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--dubbo組件--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency></dependencies><dependencyManagement><dependencies><!--spring-cloud-alibaba依賴版本控制--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement> </project>2.2. 創建子模塊DubboApi
<?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>EShopParent</artifactId><groupId>com.gblfy</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>DubboApi</artifactId></project>2.3. 創建服務端Stock-serv
<?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>EShopParent</artifactId><groupId>com.gblfy</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Stock-serv</artifactId><dependencies><dependency><groupId>com.gblfy</groupId><artifactId>DubboApi</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>2.4. 創建服務端product-serv
<?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>EShopParent</artifactId><groupId>com.gblfy</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>product-serv</artifactId><dependencies><dependency><groupId>com.gblfy</groupId><artifactId>DubboApi</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies> </project>2.5. 創建消費端端Order-serv
<?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>EShopParent</artifactId><groupId>com.gblfy</groupId><version>1.0-SNAPSHOT</version></parent><groupId>com.gblfy</groupId><artifactId>Order-serv</artifactId><modelVersion>4.0.0</modelVersion><dependencies><dependency><groupId>com.gblfy</groupId><artifactId>DubboApi</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>三、需求實戰-代碼編寫
3.1. 創建公共接口
在DubboApi子模塊中創建調用扣庫存模塊(Stock-serv)的接口IStockService
package com.gblfy.stock.api;public interface IStockService {public String reduce(Integer productId, Integer userId); }在DubboApi子模塊中創建調用產品(product-serv)模塊的接口
package com.gblfy.product.api;public interface IProductService {public String buyProduct(Integer productId, Integer userId); }3.2. 扣庫存服務端編寫
在Stock-serv子模塊中實現接口實現類StockServiceimpl
package com.gblfy.service.impl;import com.gblfy.stock.api.IStockService; import org.apache.dubbo.config.annotation.DubboService;@DubboService public class StockServiceimpl implements IStockService {@Overridepublic String reduce(Integer productId, Integer userId) {return "用戶編號: " + userId + "產品編碼: " + productId + "減庫存1個";} }啟動類上添加@EnableDiscoveryClient注解
package com.gblfy;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient @SpringBootApplication public class StockApplication {public static void main(String[] args) {SpringApplication.run(StockApplication.class);} }3.3. 產品服務端編寫
在product-serv子模塊中實現接口實現類ProductServiceImpl
package com.gblfy.service.impl;import com.gblfy.product.api.IProductService; import org.apache.dubbo.config.annotation.DubboService;@DubboService public class ProductServiceImpl implements IProductService {@Overridepublic String buyProduct(Integer productId, Integer userId) {return "用戶編號: " + userId + "產品編碼: " + productId + "購買PHONE SUCCESS";} }啟動類添加@EnableDiscoveryClient注解
package com.gblfy;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @EnableDiscoveryClient public class ProductApplication {public static void main(String[] args) {SpringApplication.run(ProductApplication.class);} }3.5. 消費端編寫
在Order-serv子模塊的啟動類上添加@EnableDiscoveryClient開啟服務發現掃描
package com.gblfy;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @EnableDiscoveryClient public class OrderAppliaction {public static void main(String[] args) {SpringApplication.run(OrderAppliaction.class);} }創建一個客戶端類發起請求OrderController分別向扣庫存模塊和產品模塊發起請求
package com.gblfy.controller;import com.gblfy.product.api.IProductService; import com.gblfy.stock.api.IStockService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class OrderController {@DubboReferenceprivate IStockService stockService;@DubboReferenceprivate IProductService productService;@GetMapping("/order/create")public String createOrder(Integer productId, Integer userId) {//調用扣庫存模塊服務return stockService.reduce(productId, userId);}//http://127.0.0.1:8080/order/create?productId=2&userId=8@GetMapping("/buyProduct")public String buyProduct(Integer productId, Integer userId) {//調用產品模塊服務return productService.buyProduct(productId, userId);}// http://127.0.0.1:8080/buyProduct?productId=2&userId=8 }四、需求實戰-配置編寫
4.1. 扣庫存服務端配置
# 應用端口 server:port: 8082# nacos服務發現配置 spring:cloud:nacos:server-addr: 127.0.0.1:8848discovery:service: stock-servapplication:name: stock-serv# Dubbo服務配置 dubbo:scan:base-packages: com.gblfy.service.implprotocol:name: dubboport: -1registry:address: spring-cloud://127.0.0.14.2. 產品服務端配置
server:port: 8081 spring:cloud:nacos:server-addr: 127.0.0.1:8848discovery:service: product-servapplication:name: product-serv# Dubbo服務配置 dubbo:scan:base-packages: com.gblfy.service.implprotocol:name: dubboport: -1registry:address: spring-cloud://127.0.0.14.3.消費端配置
server:port: 8080 spring:application:name: order-servcloud:nacos:discovery:server-addr: http://127.0.0.1:8848config:server-addr: http://127.0.0.1:8848# Dubbo服務配置 dubbo:protocol:name: dubboport: -1registry:address: spring-cloud://127.0.0.1cloud:subscribed-services:- stock-serv- product-serv五、需求測試實戰
5.1. 啟動nacos
5.2. 啟動服務端
分別依次啟動扣庫存服務端和產品服務端
5.3. 啟消費端
5.4. 查看nacos
5.5. 項目模塊分布結構
六、測試實戰
6.1. 請求扣庫存鏈路
http://127.0.0.1:8080/order/create?productId=2&userId=8
6.2. 請求產品鏈路
http://127.0.0.1:8080/buyProduct?productId=2&userId=8
6.3. 常見的異常
沒有服務的提供者,啟動客戶端
總結
以上是生活随笔為你收集整理的nacos集成dubbo实现远程服务调用多服务端2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取当天日期、昨天日期
- 下一篇: 分布式任务调度平台一站式讲解