服务消费者模拟同一时间用户发起多个请求。
package com.example.service.impl; import com.example.pojo.Order; import com.example.pojo.Product; import com.example.service.OrderService; import com.example.service.ProductService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @Service public class OrderServiceImpl implements OrderService { @Autowired private ProductService productService; /** * 根据主键查询订单 * * @param id * @return */ @Override public Order searchOrderById(Integer id) { // 模拟同一时间用户发起多个请求。 Future<Product> p1 = productService.selectProductById(1); Future<Product> p2 = productService.selectProductById(2); Future<Product> p3 = productService.selectProductById(3); Future<Product> p4 = productService.selectProductById(4); Future<Product> p5 = productService.selectProductById(5); try { System.out.println(p1.get()); System.out.println(p2.get()); System.out.println(p3.get()); System.out.println(p4.get()); System.out.println(p5.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return new Order(id, "order-003", "中国", 29000D, null); } } 启动类服务消费者启动类开启熔断器注解。
package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; // 开启熔断器注解 2 选 1,@EnableHystrix 封装了 @EnableCircuitBreaker // @EnableHystrix @EnableCircuitBreaker @SpringBootApplication public class OrderServiceRestApplication { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(OrderServiceRestApplication.class, args); } } 测试访问::9090/order/1/product 控制台打印结果如下:
-----orderService-----selectProductListByIds----- {id=1, productName=电视机1, productNum=1, productPrice=5800.0} {id=2, productName=电视机2, productNum=1, productPrice=5800.0} {id=3, productName=电视机3, productNum=1, productPrice=5800.0} {id=4, productName=电视机4, productNum=1, productPrice=5800.0} {id=5, productName=电视机5, productNum=1, productPrice=5800.0}根据结果得知,请求本来调用的是单个商品查询,请求合并以后只请求了一次批处理查询。
服务隔离
分类:
技术点:
相关文章:
Spring Cloud Alibaba系列之分布式服务组件Dubbo 2021-05-31
Spring Cloud正式移除Hystrix、Zuul等Netflix OSS组件 2020-12-24
Spring Cloud Alibaba 之 user服务 2020-11-09
Spring Cloud系列(四):Eureka源码解析之客户端 2020-10-06
Spring Cloud系列(三):Eureka源码解析之服务端 2020-10-05
Spring Cloud系列之使用Feign进行服务调用 2020-07-28
Spring Cloud Alibaba系列(五)sentinel实现服务限流降级 2020-06-28
Spring Cloud 系列之 Dubbo RPC 通信 2020-06-17
Spring Cloud Alibaba系列(四)使用gateway作为服务网关 2020-06-17
Spring Cloud 系列之 Alibaba Nacos 配置中心 2020-06-16
spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息 2020-06-13
Spring Cloud 系列之 Alibaba Nacos 注册中心(二) 2020-06-11
Spring Cloud 系列之 Alibaba Nacos 注册中心(一) 2020-06-10
Spring Cloud 系列之 Apollo 配置中心(四) 2020-06-05
Spring Cloud 系列之 Apollo 配置中心(三) 2020-06-04
Spring Cloud 系列之 Apollo 配置中心(二) 2020-06-03
Spring Cloud 系列之 Apollo 配置中心(一) 2020-06-02
Spring Cloud 系列之 Consul 配置中心 2020-05-18
Spring Cloud 系列之 Bus 消息总线 2020-05-14
Spring Cloud 系列之 Config 配置中心(三) 2020-05-13