实战前需了解:https://blog.csdn.net/wanzijy/article/details/125041622
Hystrix熔断器整合 - 搭建项目:https://blog.csdn.net/wanzijy/article/details/125496651
Hystrix熔断器整合 - 请求缓存:https://blog.csdn.net/wanzijy/article/details/125512072
Hystrix熔断器整合 - 请求合并:https://blog.csdn.net/wanzijy/article/details/125579664
Hystrix熔断器整合 - 服务隔离之线程池隔离:https://blog.csdn.net/wanzijy/article/details/125630353
Hystrix熔断器整合 - 服务隔离之信号量隔离:https://blog.csdn.net/wanzijy/article/details/125826690
Hystrix熔断器整合 - 服务熔断和服务降级:https://blog.csdn.net/wanzijy/article/details/125826853
Hystrix熔断器整合 - Feign实现服务容错:https://blog.csdn.net/wanzijy/article/details/125985304
Hystrix熔断器整合 - 可视化界面三部曲:https://blog.csdn.net/wanzijy/article/details/126005452
1. 修改 ProductServiceImpl
以下操作均在 order-service-rest 模块中进行
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000"), // 超时时间,默认 1000ms
@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE"), // 信号量隔离,这里不配的话,隔离策略就是线程池隔离
@HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS, value = "6") // 信号量最大并发,调小一些方便模拟高并发
}, fallbackMethod = "selectProductListFallback")
@Override
public List<Product> selectProductList() {
System.out.println(Thread.currentThread().getName() + "------selectProductList------");
return restTemplate.exchange(
"http://product-service/product/list",
HttpMethod.GET,
null,
new ParameterizedTypeReference<List<Product>>() {
}).getBody();
}
2. 测试
去 Apache JMeter 继续执行上面实战中写好的高并发请求:“ http://localhost:9090/order/1/product/list ”
然后访问:http://localhost:9090/order/1/product/list
此时浏览器一定会返回在线程池隔离实战中没有出现的托底数据
在线程池隔离实战中没有出现托底数据,是因为浏览器在和我们的 Apache JMeter 进行资源的竞争时,竞争到了资源,即在队列排队的时候,竞争到了资源,所以我们没有办法看到返回的托底数据
但是信号量隔离不会产生上面线程池隔离的情况,因为信号量隔离使用的是一个计数器,一旦计数器的值到达上限,那么剩下的全部都会去执行回调方法,从而返回托底数据,不存在什么资源的竞争