Spring Cloud 入门——5.3 Feign 声明式调用-自定义配置

24 篇文章 0 订阅
22 篇文章 3 订阅

代码信息

本篇文章涉及代码版本

组件版本
Spring Boot2.0.8.RELEASE
Spring CloudFinchley.SR1

本篇文章涉及应用

应用说明
base-eureka服务发现
base-feign-config声明式调用-自定义配置
base-producer提供服务的最基础的应用
base-producer-cluster提供服务的最基础的应用(集群)

Feign自定义配置

为了照顾解决在不同的服务调用业务下,使用一个统一的默认配置可能没办法符合实际要求,Feign提供了针对每个FeignClient配置不同的参数来应对这些业务。

配置的优先级

既然Feign提供了让我们针对单个client编写配置的功能那么就有必要了解配置的优先级

下面是其配置的优先级,后者会覆盖前者。

  1. FeignClientsConfiguration Spring Cloud Feign 全局默认配置.
  2. @EnableFeignClients#defaultConfiguration 自定义全局默认配置
  3. FeignClient#configuration 单个Feign接口局部配置

除开这些配置之外还有在application中的全局默认配置。但是这个配置的优先级并不是确定的,取决于feign.client.default-to-properties当其为true(默认值)时application中的配置优先级最高,假如为false的时候其优先级最低

为Fegin添加自定义配置

新建一个配置

@Configurable
public class Configuration1 {

  @Bean
  public Contract feignContract() {
    //这将SpringMvc Contract 替换为feign.Contract.Default
    return new feign.Contract.Default();
  }

}

上面的配置可以让FeginClient的类使用Feign的标签进行请求数据。
目前这个配置可以修改的内容包含:

  1. 全局修改feign的配置和单独修改feign客户端的配置
  2. 修改feign默认的契约
  3. 修改feign的日志级别
  4. 根据url直接进行调用,RequestInterceptor
  5. 配置feign请求和响应的压缩,增加请求拦截器(RequestInterceptor-实现添加额外的请求头)
  6. 配置feign的超时时间
  7. 配置重试
  8. 使用hystrix fallback(略,到时候和hystrix集成时在加上)
  9. 在配置文件中完成上面的配置功能

修改FeignClient的参数

@FeignClient(value = "base-producer",configuration = Configuration1.class)
public interface ClientService {

    /**
     * 测试的服务获取
     * @return
     */
    @RequestLine("GET getService")
    String getService();

    /**
     * 用来测试超时的请求
     * @param time
     * @return
     */
    @RequestLine("POST testParams")
    String testParams(Long time);
}


此时使用Configuration1的配置后,就可以使用Feign的标签进行请求。

另外一个FeignClient还使用springmvc的配置

@FeignClient(value = "base-producer-cluster")
public interface ClientV2Service {

    /**
     * 测试的服务获取
     * @return
     */
    @RequestMapping(value = "getService",method = RequestMethod.POST)
    String getService();

}

测试

测试请求代码

@RestController
@Component
public class FeignController {

    @Autowired
    ClientService clientService;

    @Autowired
    ClientV2Service clientV2Service;


    @RequestMapping(value = "/consumer",method = RequestMethod.GET)
    public String getClientService() {
        return clientService.getService();
    }

    @RequestMapping(value = "/consumerV2",method = RequestMethod.GET)
    public String getClientServiceV2() {
        return clientV2Service.getService();
    }


    @RequestMapping(value = "/testParams",method = RequestMethod.GET)
    public String testParams() {
        return clientService.testParams(1000L);
    }

}

访问:http://localhost:8404/consumer

返回:Services: [base-producer, base-producer-cluster, base-feign-config]

访问:http://localhost:8404/testParams

返回:Services: 1000

访问:http://localhost:8404/consumerV2

返回:Services: [base-producer, base-producer-cluster, base-feign-config]

我们可以对FeignClient配置不同的内容实现自己的配置,但是无论是请求数据还是配置Feign。组件存在一些比较坑的地方。后续会对这些坑进行解决。


本篇文章并未贴出所有代码,涉及的源码下载地址:https://gitee.com/daifylearn/cloud-learn

ps.上述的所有项目都是可以成功运行的。但是在后期为了实现每个应用端口尽量不冲突会有些许调整,而后续某次作死调整结构和名称可能会导致部分项目无法运行o(╯□╰)o,如果发现请留言我进行修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Cloud是一个开源的微服务框架,它提供了一系列的工具和组件,用于构建分布系统中的各个微服务。其中包括服务注册与发现、配置中心、网关和服务调用等功能。 服务注册与发现是Spring Cloud中的一个重要组件,它使用Eureka作为服务注册中心。通过在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-eureka,可以实现将微服务注册到Eureka服务器上。\[1\] 配置中心是用于集中管理微服务的配置信息的组件。在Spring Cloud中,可以使用Spring Cloud Config来实现配置中心的功能。通过在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-config,可以将配置信息存储在配置中心,并在微服务启动时从配置中心获取配置信息。 Zuul是Spring Cloud中的网关组件,它可以实现请求的路由、负载均衡、过滤等功能。在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-zuul,使用@EnableZuulProxy注解开启Zuul网关。\[2\]\[3\] FeignSpring Cloud中的服务调用组件,它可以简化微服务之间的调用过程。通过在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-feign,可以使用Feign来定义和实现服务之间的调用接口。 综上所述,Spring Cloud提供了服务注册与发现、配置中心、网关和服务调用等功能,可以帮助开发者构建和管理分布系统中的微服务。 #### 引用[.reference_title] - *1* *3* [非常全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了!](https://blog.csdn.net/bishe_teacher/article/details/107844103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [全面的讲解SpringCloud中Zuul网关原理及其配置,看它就够了](https://blog.csdn.net/Cr1556648487/article/details/126543111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大·风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值