假设我有一个业务,根据一定规则轮流分配给两个不同的平台来完成。我定义任务数据发送接口,两家平台各自实现接口接收我发送的任务数据。如何根据两家平台提供的url动态创建feign客户端?
1.定义数据发送接口:
@FeignClient(name = "TaskSendClient") public interface ITaskSendClient{ @PostMapping(value="sendTask",consumes= MediaType.APPLICATION_JSON_UTF8_VALUE) SendTaskResp sendTask(@RequestBody TaskBean req); }
2.定义feign客户端创建服务接口:
public interface IFeignClientCreateService { /** * @fun 通过url创建feign客户端实例 * @param clientType feign接口类 * @param url 动态url * @return */ public <T> T newClientByUrl(Class<T> clientType, String url); }
3.实现feign客户端创建服务接口
@Service @Import(FeignClientsConfiguration.class) public class FeignClientCreateService implements IFeignClientCreateService { private final Feign.Builder urlBuilder; private Map<String, Object> clientCached = new ConcurrentHashMap<>(); @Autowired public FeignClientCreateServiceImpl(Decoder decoder, Encoder encoder, Client client, Contract contract) { if (client instanceof LoadBalancerFeignClient) { client = ((LoadBalancerFeignClient)client).getDelegate(); } urlBuilder = Feign.builder().client(client) .encoder(encoder) .decoder(decoder) .contract(contract); } @Override @SuppressWarnings("unchecked") public <T> T newClientByUrl(Class<T> clientType, String url) { Object obj = clientCached.get(url); if (obj != null) { return (T)obj; } T client = urlBuilder.target(clientType, url); clientCached.put(url, client); return client; } }
4.调用
(1)注入Feign客户端创建服务接口
@Autowired private IFeignClientCreateService feignService;
(2)动态生成客户端并调用:
ITaskSendClient client = feignService.newClientByUrl(ITaskSendClient.class, url); SendTaskResp resp = client.sendTask(req)
相关推荐
《深入理解Spring Cloud与微服务构建》学习笔记(十二)~写一个Feign客户端,可以直接运行。
Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。
feign是一个声明式的Web服务客户端. feign:基于ribbon和hystrix的声明式服务调用组件. 作用: 跨域请求,feign结合eureka注册中心,把不同的服务项目注册到eureka中,通过feign客户端进行调用来解决负载均衡问题 首先...
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格...
feign调用方法: @RequestMapping(value = /resources/ocircuit/textInfo, method = {RequestMethod.GET}, produces = text/plain;charset=utf-8) String getOcircuitTextRouteInfo(@PathVariable(name = resID) ...
feign-reactor-core :应该允许实现替代React堆Feign的基类和接口 feign-reactor-webclient :基于Spring WebClient的React堆Feign的实现 feign-reactor-cloud :FeignReact堆的Spring Cloud实现(Ribbon / Hystrix...
使用OpenFeign进行服务端调用,动态修改URL的测试DEMO,该DEMO使用Maven进行创建,使用idea进行开发
Feign使用Jersey和CXF等工具为ReST或SOAP服务编写Java客户端。 此外,Feign允许您在诸如Apache HC之类的http库之上编写自己的代码。 Feign通过可自定义的解码器和错误处理功能,以最小的开销和代码将代码连接到...
Feign 使得编写Java HTTP客户端更容易
Feign是一个声明式的Web Service客户端,它能够让Web Service客户端的编写变得更加容易(你只需创建一个接口,并在接口上添加相应注解即可)。除了Feign自带的注解外它还支持JAX-RS注解,SpringCloud又为Feign增加了...
feign是一个java到http的客户端绑定器,灵感来自于reformation、jaxrs-2.0和websocket。FIGN的第一个目标是将绑定分母的复杂性均匀地降低到HTTP API,而不管休眠性。
SpringBoot使用Feign调用第三方接口实例代码
springcloud feign 服务消费者 类似 webservice ====== http://knight-black-bob.iteye.com/blog/2356222
Feign 使得 Java HTTP 客户端编写更方便。Feign 灵感来源于 Retrofit, JAXRS-2.0 和 WebSocket,Feign 最初是为了降低统一绑定 Denominator 到 HTTP APIs 的复杂度,不管是否是 Restful 。基础使用:interface ...
Feign是一个Java到HTTP客户端绑定器
feign例子,创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。
前八篇文章介绍完了feign-core核心内容,从本篇开始将介绍它的“其它模块”。其实核心模块可以独立的work,但是不免它的能力偏弱,比如只能编码字符串类型、只能解码字符串类型,默认使用java.net.HttpURLConnection...
主要给大家介绍了关于feign服务端发现异常客户端处理的方法,文中通过示例代码介绍的非常详细,对大家学习或者使用feign具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
使用Feign,只需要创建一个接口并注解,它具有可插拔的注解特性,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和...
主要介绍了Spring Cloud如何使用Feign构造多参数的请求,以GET以及POST方法的请求为例进行讲解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下