zoukankan      html  css  js  c++  java
  • openfeign 实现动态Url

    1. 依赖:

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>

    2.使用: 

    //url必须写一个默认的,是什么不重要,执行时会被替换
    @FeignClient(value = "bx-xx-service",url = "http://XXX.XXX.XXX.XXX:80")
    public interface UserServiceClient {
        @PostMapping("/query")
        JSONObject findByUser(URI uri,@RequestBody JSONObject json);
    }
     @Autowired
        private UserServiceClient userServiceClient;
        
        @PostMapping("/findByUser")
        public JSONObject findByUser(@RequestBody JSONObject json)throws Exception{
            String url = json.remove("uri") 
    JSONObject result
    =userServiceClient.findByUser(new URI(url),json); return result; }

    逐个解析下相关细节:

    SpringMVC的其他注解在此处都是支持的。(有其他文章提到也支持OpenFeign原有的注解@RequestLine、@Param等,但博主实测是不支持的,相关解析类为 feign.Contract,这个存疑)

    在使用方式上,OpenFeign需要手动构建代理对象,Spring Cloud OpenFeign 不同于 OpenFeign, Spring Cloud OpenFeign 帮我们自动生成了接口的代理对象(即实现类),并且注册到Spring中,我们可以很方便的使用 @Autowired 注入代理对象然后使用。其默认的代理对象是 LoadBalancerFeignClient。还有一个代理对象是 feign.Client.Default。两者区别在于:
    LoadBalancerFeignClient 通过服务名(下文提到)从Eureka查找相关的节点地址url,发起调用。
    feign.Client.Default 仅是简单的直接调用。

    @FeignClient(name = “ThirdPartyAPI”, url = “http://XXX.XXX.XXX.XXX:8080”)
    name 属性是 @FeignClient 注解必要的!不定义时会报错,其默认指代Eureka上的服务名。
    url 属性,这是重点了! url属性指定什么值其实不重要,因为最终都会被方法的URI参数值替换掉,它在这里另一个重要的作用,就是将接口的代理对象变成feign.Client.Default(上文提到默认是LoadBalancerFeignClient),这样就绕过了从Eureka取节点地址这一步,毕竟第三方的地址不可能注册到我们的Eureka上。(相关细节可自行debug FeignClientFactoryBean.getTarget())

    总结一下关键点:
    @FeignClient 注解需要指定其 url 属性(值不重要)!
    接口方法定义增加 URI类型的参数!
    接口方法定义SpringMVC的注解
    使用@Autowired 注入代理对象可直接调用

    参考:实测可用:

    https://blog.csdn.net/weixin_43851064/article/details/115123276

  • 相关阅读:
    BNU 33693——Problemsetting——————【枚举+最大流】
    HDU 5656 ——CA Loves GCD——————【dp】
    HZAU 21——Arithmetic Sequence——————【暴力 or dp】
    HZAU 18——Array C——————【贪心】
    BNU 20950 ——沉重的货物 —————— · 最短路、最短边最大化」
    vim创建新的命令
    vim 配置文件——部分配置
    nyoj 1239——引水工程——————【最小生成树 prim】
    内部排序 ——第3波——————【快速排序】
    PostgreSQL 安装配置 (亲测可用)
  • 原文地址:https://www.cnblogs.com/lshan/p/15541012.html
Copyright © 2011-2022 走看看