概述
Feign动态定义调用path与serverName
需求背景:完成一个公共模块,当对接方接入时可以通过传递serverName与path,完成服务端对接入方的回调。
对于平时使用feign,大多数场景下都是知道对接方的hostname以及path,可直接使用@FeignClient(name = "",url = "")
调用。
而对于动态uri的需求,我们也可以使用如下做法,做到动态uri调用。
@GetMapping(value = "")
byte[] functionName(URI uri);
但动态的serverName没办法在@FeignClient
这个注解直接使用。于是就得通过手动创建FeignClient的方式,指定host与path。
- 定义一个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();
}
}
- 提供一个业务feignClient
@FeignClient(name = "xxxClient",contextId = "xxxClient")
public interface XxxClient {
@PostMapping(value = "")
ResultObject functionName(@Param("param") String param);
}
- 在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);
}
}
以上参考了这篇文章
对部分内容进行了改动,以适应自己的业务需求开发。以上文章还提供了其他的动态调用的方式。
最后
以上就是震动雨为你收集整理的Feign动态定义调用serverName与path的全部内容,希望文章能够帮你解决Feign动态定义调用serverName与path所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复