美文网首页
27.fegin整合sentinel实现容错

27.fegin整合sentinel实现容错

作者: LANSHENGYANG | 来源:发表于2020-05-29 15:40 被阅读0次

Feign整合Sentinel

  • 第1步:引入sentinel的依赖
<!--Sentinel客户端-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 第2步:在配置文件中开启Feign对Sentinel的支持
feign:
  sentinel:
    enabled: true
  • 第3步:创建容错类
/**
 * 容错类:需要实现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;
    }
}
  • 第4步:为被容错的接口指定容错类
/**
 * 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);
}
  • 第5步:修改controller
/**
 * 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;
}

相关文章

网友评论

      本文标题:27.fegin整合sentinel实现容错

      本文链接:https://www.haomeiwen.com/subject/ozzxzhtx.html