feign name指定服务调用无效

文章讲述了在使用FeignClient时遇到的问题,即接口调用必须指定URL路径而非通过name,原因在于第三方服务配置中的context-path影响了路径。解决方法是通过添加`path`属性来指定前缀。
摘要由CSDN通过智能技术生成

背景

在做三方的外接接口的时候,出现了非常奇怪的一个问题。某个feign调用,必须使用 url 指定路径才能做到访问,因为明明使用name属性就可以指定服务了。这就非常奇怪了(•́へ•́╬)

@FeignClient(name = "outerService", url = "${third.url}",configuration = FeignConfig.class, fallbackFactory = OuterServiceFallbackFactory.class)
// @FeignClient(value = "outerService",configuration = FeignConfig.class, fallbackFactory = OuterServiceFallbackFactory.class, decode404 = true)
@Service
public interface outerServiceClientFeign extends BafooCommonApi {

}

涨知识了

声明接口时在代码中通过@Resource注入容器之后即可使用。@FeignClient注解的常用属性如下:

  • value/name:value和name的作用一样,用于指定FeignClient的名称;如果没有配置url,而且项目使用了Eureka 、nacos或者ribbon,name属性会作为微服务的名称,用于服务发现。反之,只是一个名称。此属性和 spring.application.name 对应。

  • url:一般用于调试,作用是指定@FeignClient调用的API地址,而非从服务中心获取。

  • url和name都可以使用占位符,比如:@FeignClient(name = “your.feign.name",url="${your.feign.url}”);

  • decode404:当发生http 404错误时,如果该字段为true,会调用decoder进行解码;否则,抛出FeignException。

  • configuration:Feign配置类,作用是自定义Feign的Encoder、Decoder、LogLevel、Contract。

  • fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。

  • fallbackFactory:工厂类,用于生成fallback类实例,实现每个接口通用的容错逻辑,减少重复的代码。

  • path:定义当前FeignClient的统一前缀。

  • contextId:为某个接口设置单独的超时,与与config里的属性对应。

原因

三方服务的配置文件里面加上了,前缀路径

 servlet:
    context-path: /outer

这就导致,feign调用时,拼接的路径少了 一个前缀 /outer

解决办法

使用 path属性,指定前缀。

@FeignClient(value = "outerService",path = "/outer",configuration = FeignConfig.class, fallbackFactory = OuterServiceFallbackFactory.class, decode404 = true)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值