ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Feign 整合Sentinel

2021-12-06 17:35:09  阅读:180  来源: 互联网

标签:容错 Feign feign Product product 整合 Sentinel import wdz


接上:

https://blog.csdn.net/wdz985721191/article/details/121713020

引入依赖:

在所需要的服务中引入依赖

<!--fegin-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置文件:

# 开启feign对sentinel的支持
feign:
  sentinel:
    enabled: true

方式一:

创建容错类:实现Feign接口即可

package wdz.order.feign.fallback;

import org.springframework.stereotype.Service;
import wdz.common.model.Product;
import wdz.order.feign.FeignProductService;

import java.math.BigDecimal;

/**
 * 产品服务模块容错类
 * 实现feign接口,并实现所有接口,
 * 远程失败后,进入当前类中的同名方法中,执行容错逻辑
 */
@Service
public class FallbackProduct implements FeignProductService {
    @Override
    public Product findById(Long id) {
        Product product = new Product();
        product.setId(-1L);
        product.setName("远程调用失败,容错逻辑");
        product.setPrice(BigDecimal.ZERO);
        product.setStock(0);
        return product;
    }
}

feign接口:


/**
 * fallback 用于指定远程异常返回类
 */
@FeignClient(value = "wdz-product",fallback = FallbackProduct.class)
public interface FeignProductService {


    @RequestMapping("/query/{id}")
    Product findById(@PathVariable Long id);

}

此处代码逻辑处理与hystrix与feign整合类似

由于容错配置之后无异常,对业务排错有一定的阻碍,

方式二:

使用fallbackFactory的方式,两种方式只用一种即可

实现代码:

package wdz.order.feign.fallback;

import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Service;
import wdz.common.model.Product;
import wdz.order.feign.FeignProductService;

import java.math.BigDecimal;

/**
 * 容错类,实现FallbackFactory<对应的Feign接口>
 */
@Service
public class FallbackProductException implements FallbackFactory<FeignProductService> {


    @Override
    public FeignProductService create(Throwable throwable) {
        // 异常处理
        System.out.println("异常处理");
        return new FeignProductService() {
            @Override
            public Product findById(Long id) {
                Product product = new Product();
                product.setId(-1L);
                product.setName("远程调用失败,容错逻辑");
                product.setPrice(BigDecimal.ZERO);
                product.setStock(0);
                return product;
            }
        };
    }
}

标签:容错,Feign,feign,Product,product,整合,Sentinel,import,wdz
来源: https://blog.csdn.net/wdz985721191/article/details/121750309

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有