springcloud微服务 整合feign、hystrix遇到的错误com.XXX.UserProviderXX#getMap(Integer)mapped

首先说一下:这个问题是feign和hystrix结合时的一个坑,也可以是这两者结合使用的一个bug;
问题描述:
在启动User-Consumer时,接口中的方法被重复注册了
启动User-Consumer时,具体的报错信息,如下图所示:
在这里插入图片描述
话不多说,上代码:
接口模块:User-API(需要对外发布的接口内容)

@RequestMapping("/user")
public interface UserAPI {
    @RequestMapping("/alive")
    public String alive();
}

User-Provider中实现User-API接口:

@RestController
public class UserController  implements UserAPI{
    @Value("${server.port}")
    String port;
    @Override
    public String alive() {
       	//具体的业务逻辑
        return "我是User-API接口模块中的alive接口,由user-provider模块实现!";
    }
 }

在User-Consumer中使用Feign做远程调用,并用Hystrix做服务的降级:
一、在配置文件中修改添加: feign.hystrix.enabled=true (开启 feign在做远程服务调用的时候 由hystrix进行包装;feign在做远程服务调用的时候,如果出错就会进入hystrix定义的回调方法)
二、定义一个接口实现,继承UserAPI接口类:

@FeignClient(name="user-provider", fallback = UserProviderBack.class)
public interface ConsumerApiForInterface extends UserAPI{
   // 这里什么都不需要写
}

三、定义UserProviderBack.java类,并实现ConsumerApiForInterface 接口:

@Component
public class UserProviderBack implements ConsumerApiForInterface{
// 这里实现的是UserAPI接口中的方法
    @Override
    public String alive() {
        return "服务降级了";
    }
  }

四、配置完成之后,启动User-Consumer,在启动时会发现这个模块启动不起来,而且会报文章开头提到的错误;
在这里插入图片描述

重点

经过查找原因,可以发现,这个错误并不是我们在写代码的时候由于逻辑或其他 我们自身的原因造成,是由于feign和hystrix结合使用时所出现的错误,这个错误在User-API中的接口里面:
在这里插入图片描述
我们保要稍加改动,便可正常运行,只需要将类中加的@RequestMapping("/user")去掉,将 @RequestMapping("/alive")改为: @RequestMapping("/user/alive")
再次启动User-Consumer,即可正常启动!

原因在于:feign和hystrix结合使用的时候,会在方法中的@RequestMapping("/alive")的路径中加上“/user”,此时就变成了@RequestMapping("/user/alive"),但是这个方法在User-Provider中已经被注册过了所以会报重复“There is already ‘XXXX’ bean method”的错误!

这是feign和hystrix结合使用时的一个坑,注意一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值