我是靠谱客的博主 震动雨,最近开发中收集的这篇文章主要介绍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);
	}
}

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

最后

以上就是震动雨为你收集整理的Feign动态定义调用serverName与path的全部内容,希望文章能够帮你解决Feign动态定义调用serverName与path所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(28)

评论列表共有 0 条评论

立即
投稿
返回
顶部