文章目录
- 一、版本选取、需求和项目简述
- 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.1
4.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.1
4.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. 常见的异常
没有服务的提供者,启动客户端