@RestController
@Slf4j
public class OrderController2 {
@Autowired
private OrderService orderService;
@Autowired
private ProductService productService;
@RequestMapping("/order/prod/{pid}")
public Order order(@PathVariable("pid") Integer pid) {
log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", pid);
//调用商品微服务,查询商品信息
Product product = productService.findByPid(pid);
log.info("查询到{}号商品的信息,内容是:{}", pid, JSON.toJSONString(product));
//模拟一次网络延时
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//下单(创建订单)
Order order = new Order();
order.setUid(1);
order.setUsername("测试用户");
order.setPid(pid);
order.setPname(product.getPname());
order.setPprice(product.getPprice());
order.setNumber(1);
//为了不产生太多垃圾数据,暂时不做订单保存
//orderService.createOrder(order);
log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));
return order;
}
@RequestMapping("/order/message")
public String message() {
return "高并发下的问题测试";
}
}
server:
port: 8091
tomcat:
max-threads: 5
3.半熔断状态(Half-Open):尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预 期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断关闭状态。
下面是三个组件在各方面的对比:?
Sentinel
|
Hystrix
|
resilience4j
| |
隔离策略
|
信号量隔离(并发线程数限流)
|
线程池隔离
/
信号量隔离
|
信号量隔离
|
熔断降级策略
|
基于响应时间、异常比率、异常数
|
基于异常比率
|
基于异常比率、响应时间
|
实时统计实现
|
滑动窗口(LeapArray)
|
滑动窗口(基
于
RxJava
)
|
Ring Bit Buffer
|
动态规则配置
|
支持多种数据源
|
支持多种数源
|
有限支持
|
扩展性
|
多个扩展点
|
插件的形式
| 接口的形式 |
基于注解的支持
|
支持
|
支持
|
支持
|
限流
|
基于
QPS
,支持基于调用关系的限流
|
有限的支持
|
Rate Limiter
|
流量整形
|
支持预热模式、匀速器模式、预热排队模式
|
不支持
|
简单的
RateLimiter 模式
|
系统自适应保护
|
支持
|
不支持
|
不支持
|
控制台
|
提供开箱即用的控制台,可配置规则、 查看秒级监控、机器发现等
|
简单的监控看
|
不提供控制台,可对接其它监控系统
|