Feign整合Sentinel
<!--Sentinel客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 第2步:在配置文件中开启Feign对Sentinel的支持
feign:
sentinel:
enabled: true
/**
* 容错类:需要实现Feign所在的接口,并去实现接口中的所有方法
* 一旦Feign远程调用出现问题了,就会进入当前类中同名方法,执行容错逻辑
*/
@Service
public class ProductServiceFallBack implements ProductService {
/**
* 容错方法
* @param pid
* @return
*/
@Override
public Product findByPid(Integer pid) {
//容错逻辑
Product product = new Product();
product.setPid(-100);
product.setPname("远程调用商品微服务出现异常了,进入了容错逻辑");
return product;
}
}
/**
* value:指定那个微服务
* fallback:指定当前feign接口的容错类
*/
@FeignClient(
value = "service-product",
fallback = ProductServiceFallBack.class)
public interface ProductService {
/* @FeignClient的value + @RequestMapping的value值,其实就是一个完整的请求地址
* http://service-product/product/{pid}
*/
@RequestMapping("/product/{pid}")
Product findByPid(@PathVariable("pid") Integer pid);
}
/**
* feign实现服务调用
* @param pid
* @return
*/
@RequestMapping("/order/prod/{pid}")
public Order order(@PathVariable("pid") Integer pid) {
log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", pid);
Product product = productService.findByPid(pid);
if (product.getPid()==-100){
Order order = new Order();
order.setOid(-100L);
order.setPname("下单失败");
return order;
}
log.info("查询到{}号商品的信息,内容是:{}", pid, JSON.toJSONString(product));
//下单(创建订单)
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;
}
网友评论