Feign动态定义调用serverName与path

Feign动态定义调用path与serverName

需求背景:完成一个公共模块,当对接方接入时可以通过传递serverName与path,完成服务端对接入方的回调。

对于平时使用feign,大多数场景下都是知道对接方的hostname以及path,可直接使用@FeignClient(name = "",url = "")调用。

而对于动态uri的需求,我们也可以使用如下做法,做到动态uri调用。

	@GetMapping(value = "")
    byte[] functionName(URI uri);

但动态的serverName没办法在@FeignClient这个注解直接使用。于是就得通过手动创建FeignClient的方式,指定host与path。

  1. 定义一个FeignClient工厂
@Component
public class DynamicFeignClientFactory<T> {

    private FeignClientBuilder feignClientBuilder;

    public DynamicFeignClientFactory(ApplicationContext appContext) {
        this.feignClientBuilder = new FeignClientBuilder(appContext);
    }

    public T getFeignClient(final Class<T> type, String serviceId,String path) {
        return this.feignClientBuilder.forType(type, serviceId).path(path).build();
    }
}
  1. 提供一个业务feignClient
@FeignClient(name = "xxxClient",contextId = "xxxClient")
public interface XxxClient {
    @PostMapping(value = "")
    ResultObject functionName(@Param("param") String param);
}
  1. 在service方法中使用(因为我的项目中使用了nacos,serverName这个参数就是对应的应用服务名,应该也可以改成域名调用)
@Service
public class DemoService{
	@Resource
    private DynamicFeignClientFactory<XxxClient> feignClientFactory;

	public void demoFunction(String serverName, String uri, String params){
		XxxClient feignClient = feignClientFactory.getFeignClient(XxxClient.class, serverName, uri);
		feignClient.functionName(params);
	}
}

以上参考了这篇文章
对部分内容进行了改动,以适应自己的业务需求开发。以上文章还提供了其他的动态调用的方式。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值