【微服务|Sentinel】sentinel整合openfeign

步骤

上文我们谈到sentinel的注解@SentinelResource以及其对异常兜底方案的处理。

如果对每一个接口都做各自的处理,会有诸多不便,所以我们可以整合openfeign对限流降级策略统一处理。

第一步:打开feign对sentinel的支持

feign:
  sentinel:
    enabled: true

第二步:编写兜底方案

import com.ossa.feign.api.producer.ProducerFeign;
import org.springframework.stereotype.Service;

/**
 * @author issavior
 */

@Service
public class ProducerFeignFallback implements ProducerFeign {
    @Override
    public String producerById(String id) {
        String msg = "fallback限流方法";
        return id + msg;
    }
}

第三步:修改@FeignClient注解

import com.ossa.feign.config.FeignClientConfig;
import com.ossa.feign.fallback.ProducerFeignFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author issavior
 */

@FeignClient(value = "ossa-service-producer", configuration = FeignClientConfig.class,fallback = ProducerFeignFallback.class)
public interface ProducerFeign 
{

    /**
     * 根据ID查询商品
     *
     * @param id 商品的主键ID
     * @return 相关商品的信息
     */

    @GetMapping(value = "/producer/{id}")
    String producerById(@PathVariable("id") String id);

}

问题

问题描述:

Caused by: java.lang.IllegalStateException: Ambiguous mapping【微服务|Sentinel】sentinel整合openfeign

分析:

在feign的接口上使用@RequestMapping注解,就会导致这个问题。

Controller这一个控制层请求映射了两个方法,且在Controller中重复了,所以报错。或者说,如果一个项目中有两个@RequestMapping(“/xxx”)完全相同就会报 java.lang.IllegalStateException,controller所在的模块依赖了client所在的模块才导致冲突的。

解决方案:

去掉@RequestMapping

【微服务|Sentinel】sentinel整合openfeign


原文始发于微信公众号(步尔斯特):【微服务|Sentinel】sentinel整合openfeign

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48171.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!