网站建设 千助,学生网站作品,相城网页设计报价,河北公司注册网上核名Feign#xff0c;在微服务框架中#xff0c;是的服务直接的调用变得很简洁、简单#xff0c;而不需要再编写Java Http调用其他微服务的接口。
动态feign 对于fegin调用#xff0c;我们一般的用法#xff1a;为每个微服务都创建对应的feignclient接口#xff0c;然后为每…Feign在微服务框架中是的服务直接的调用变得很简洁、简单而不需要再编写Java Http调用其他微服务的接口。
动态feign 对于fegin调用我们一般的用法为每个微服务都创建对应的feignclient接口然后为每个微服务的controller接口一一编写对应的方法去调用对应微服务的接口。
例如下面这样
//system
FeignClient(name system)
public interface SystemClient {GetMapping(/system/test1)JsonResult test1(String test1);GetMapping(/system/test2)JsonResult test2(String test2);....
}//user
FeignClient(name user)
public interface UserClient {GetMapping(/user/test1)JsonResult test1(String test1);GetMapping(/user/test2)JsonResult test2(String test2);....
}这样写的话可能会有些累赘那么我们能不能创建一个动态的feign当调用sytem微服务的时候传递一个feignclient的name为system进去然后定义一个通用的方法指定调用的url传递的参数就可以了呢
答案是可以的_
定义一个通用的接口通用的getpost方法
public interface DynamicService {PostMapping({url})Object executePostApi(PathVariable(url) String url, RequestBody Object params);GetMapping({url})Object executeGetApi(PathVariable(url) String url, SpringQueryMap Object params);
}executePostApi(post方法)
url表示你要调用微服务的接口url一般来说是对应controller接口的url
params为调用该接口所传递的参数这里加了RequestBody那对应的controller接口接收参数也需要加上该注解。
定义一个动态feignclient
Component
public class DynamicClient {Autowiredprivate DynamicFeignClientFactoryDynamicService dynamicFeignClientFactory;public Object executePostApi(String feignName, String url, Object params) {DynamicService dynamicService dynamicFeignClientFactory.getFeignClient(DynamicService.class, feignName);return dynamicService.executePostApi(url, params);}public Object executeGetApi(String feignName, String url, Object params) {DynamicService dynamicService dynamicFeignClientFactory.getFeignClient(DynamicService.class, feignName);return dynamicService.executeGetApi(url, params);}
}executePostApi(post方法)
feignName表示需要调用的微服务的名称一般对应application.name例如system
url表示你要调用微服务的接口url一般来说是对应controller接口的url
params为调用该接口所传递的参数这里加了RequestBody那对应的controller接口接收参数也需要加上该注解。
定义一个动态feignclient工厂类
Component
public class DynamicFeignClientFactoryT {private FeignClientBuilder feignClientBuilder;public DynamicFeignClientFactory(ApplicationContext appContext) {this.feignClientBuilder new FeignClientBuilder(appContext);}public T getFeignClient(final ClassT type, String serviceId) {return this.feignClientBuilder.forType(type, serviceId).build();}
}主要的作用是帮我们动态的创建一个feignclient对象
好了具体的操作步骤就是上面所说的了是不是很通用了呢_
通用是通用了那怎么玩呢如何使用
使用的方式也是十分的简单啦_
DynamicClient dynamicClient SpringUtil.getBean(DynamicClient.class);
Object result dynamicClient.executePostApi(system, /system/test, new HashMap());
System.out.println(JSONObject.toJSONString(result));先获取到DynamicClient对象然后直接调用executePostApi方法
“system”表示调用微服务的名称一般对应application.name
“/system/test”表示调用的url
new HashMap()为需要传递的参数
好了这样就实现了一个通用版的feignclient那我们就可以愉快的编写代码了_