Sentinel+openFeign实现“调度服务的限流熔断”(简约版)
Sentinel+openFeign实现“调度服务的限流熔断”(简约版)
首先假设一个场景:有一个使用SpringCloudAlibaba框架构建的订购系统,其中订单服务(order)调度库存服务(inventory)。且订单服务和库存服务均已注册进nacos和sentinel
库存服务
接口(忽略具体CRUD操作)
@Autowired
ReduceServer reduceServer;
@GetMapping(path = {"/reduce"})
@SentinelResource(value = "reduce")//库存服务压力不能过大,必须限流
public Map reduce(@RequestParam(value="quantity") int quantity){
Map result = new HashMap<String,Object>();
// 调用server中减少库存的方法
result = reduceServer.reduce(result,quantity);//请忽略这一行代码,他是调用的CRUD操作,和本文记述无太大关系
return result;
}
订单服务
调度库存服务接口(忽略具体CRUD操作)
@Component
@FeignClient(value = "inventory-server",fallback = InventoryOpenFeignFallback.class)
public interface InventoryOpenFeign {
@GetMapping(path = {"/reduce"})
public Map reduce(@RequestParam("quantity") int quantity);
}
调度库存服务的熔断方法(兜底方法)
public class InventoryOpenFeignFallback implements InventoryOpenFeign{
@Override
public Map reduce(int quantity) {
Map result = new HashMap();
... // 忽略中间的CRUD等业务代码,包括回滚,报错等
result.put("message","quantity-server ERROR");
return result;
}
}
⚠️ 注意
- 限流不能在订单服务中布置,必须在被调用的端口处布置,如上述的库存服务
@FeignClient注解必须和@Component搭配使用- 订单服务的”调度库存服务接口“中定义的方法在方法名,参数名,参数个数,参数顺序,返回值类型这5点上必须和库存服务的接口一致
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18018505

浙公网安备 33010602011771号