四、Spring Cloud Alibaba项目,测试模块之生产者与消费者
1、模块说明
生产者:service-order
消费者:service-user
说明:消费者user调用生产者order,调用订单服务
2、生产者
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.shiwn</groupId> <artifactId>spring-cloud-alibaba</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.shiwn</groupId> <artifactId>service-order</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service-order</name> <description>生产者-订单服务</description> <dependencies> <!-- 公共依赖--> <dependency> <groupId>com.shiwn</groupId> <artifactId>service-common</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
配置文件
# 应用服务 WEB 访问端口
server.port=8030
# 应用名称(nacos会将应用名称当作服务名称)
spring.application.name=service-order
# nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=192.168.1.206:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
controller
@RestController @RequestMapping("/order") public class OrderController { @Value("${server.port}") private String port; /** * 新增订单 * * @return */ @RequestMapping("/add") public String add() { System.out.println("新增订单成功"); return "订单服务-新增订单成功 - 端口:" + port; } /** * 取消订单 * * @return */ @RequestMapping("/cancel") public String cancel() { System.out.println("取消订单成功"); return "订单服务-取消订单成功 - 端口:" + port; } }
3、消费者
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.shiwn</groupId> <artifactId>spring-cloud-alibaba</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.shiwn</groupId> <artifactId>service-user</artifactId> <version>0.0.1-SNAPSHOT</version> <name>service-user</name> <description>消费者-用户服务</description> <dependencies> <!-- 公共依赖--> <dependency> <groupId>com.shiwn</groupId> <artifactId>service-common</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
配置文件
# 应用服务 WEB 访问端口
server.port=8031
# 应用名称(nacos会将应用名称当作服务名称)
spring.application.name=service-user
# nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=192.168.1.206:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
controller
@RestController @RequestMapping("/user") public class UserController { @Value("${server.port}") private String port; @Autowired private RestTemplate restTemplate; @RequestMapping("/addOrder") public String addOrder() { String url = "http://service-order/order/add"; String apiReqResult = restTemplate.getForObject(url, String.class); return "用户服务-新增订单成功:" + apiReqResult; } @RequestMapping("/cancelOrder") public String cancelOrder() { String url = "http://service-order/order/cancel"; String apiReqResult = restTemplate.getForObject(url, String.class); return "用户服务-取消订单成功:" + apiReqResult; } }
RestTemplate配置
RestTemplate 是 Spring 对HttpClient 的封装,提供了一系列方便易用的 API。可直接使用微服务名称进行调用
@Configuration public class RestConfig { @Bean @LoadBalanced //开启ribbon public RestTemplate restTemplate() { return new RestTemplate(); } }
4、更新父工程pom
<modules> <module>service-nacos</module> <module>service-common</module> <module>service-order</module> <module>service-user</module> </modules>
5、多生产者
使用ribbon的负载均衡进行多生产者测试。
(1)在idea中复制服务
(2)填写参数(二选一)
// 方式一 VM options: -Dserver.port=8040 // 方式二 Program arguments: --server.port=8040
(3)启动服务,查看nacos
(4)调用测试
地址:
http://ip:8031/user/addOrder
结果:
用户服务-新增订单成功:订单服务-新增订单成功 - 端口:8030 用户服务-新增订单成功:订单服务-新增订单成功 - 端口:8040 用户服务-新增订单成功:订单服务-新增订单成功 - 端口:8030 ...
默认使用轮询算法
注:
第一次调用时,可能会比较慢,因为要初始化ribbon的负载均衡器(懒加载)。