Spring Cloud OpenFeign 配置

news2024/10/5 12:45:37

最少的配置(使用默认配置)

最少/默认配置示例如下(使用Nacos作为服务的注册与发现中心):

  • application.properties
server.port=8082
spring.application.name=nacos-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.enabled=true

spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos

#开启热部署
spring.devtools.restart.enabled=true

  • 主启动类
package com.xl.projects;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {
	public static void main(String[] args) {
		SpringApplication.run(NacosConsumerApplication.class, args);
	}
	
}

注意! 以上需添加注解@EnableFeignClients

  • @FeignClient接口
package com.xl.projects.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "nacos-provider")
public interface TestConsumerFeign {
	
	/**
	 * 注意!!!,这里需要显示的指定@RquestParam,否者调用的时候会报错!
	 * @param param
	 * @return
	 */
	@GetMapping("/provider/test")
	String invokeProvider(@RequestParam String param);
	
}

说明 :
在这里插入图片描述
在这里插入图片描述

  • 编写测试Controller,调用@FeignClient接口,从而调用服务提供者nacos-provider的服务
package com.xl.projects.controller;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.xl.projects.feign.TestConsumerFeign;

@RestController
public class TestConsumerController {
	
	@Resource
	private TestConsumerFeign testConsumerFeign;
	
	@GetMapping("/consumer/invoke")
	public String testInovke() {
		return testConsumerFeign.invokeProvider("cosuming now!!!");
	}
	
}

说明 :
在这里插入图片描述

  • 测试,访问http://localhost:8082/consumer/invoke

    使用OpenFeign调用成功:
    在这里插入图片描述

如何自定义配置,或者叫重写默认配置

见官网 : https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign-overriding-defaults
在这里插入图片描述
可以通过@EnableFeignClients的属性defaultConfiguration 来指定使用哪一种配置方式:java代码配置还是配置文件配置

第一种方式,使用Java代码完成自定义/重写

  • 示例说明,重写编写一个@FeignClient客户端JustForTestFeign 以及配置类FooConfiguration

JustForTestFeign

package com.xl.projects.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(contextId = "sameNameDifferentId",name="nacos-provider",configuration=FooConfiguration.class)
public interface JustForTestFeign {
	
	@GetMapping("/provider/test")
	public String justTest(@RequestParam String param);
	
}

FooConfiguration

package com.xl.projects.feign;

import org.springframework.context.annotation.Bean;

import feign.Contract;

public class FooConfiguration {
	@Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }
}

配置类FooConfiguration 上可以不加@Configuration注解,只要保证在FooConfiguration 在@ComponentScan路径之下 或者 @SpringBootApplication的子包下,参见:

FooConfiguration does not need to be annotated with @Configuration. However, if it is, then take
 care to exclude it from any @ComponentScan that would otherwise include this configuration as it 
 will become the default source for feign.Decoder, feign.Encoder, feign.Contract, etc., when 
 specified. This can be avoided by putting it in a separate, non-overlapping package from any 
 @ComponentScan or @SpringBootApplication, or it can be explicitly excluded in @ComponentScan.

第二种方式,使用配置文件

形如:

spring:
    cloud:
        openfeign:
            client:
                config:
                    feignName:
                        url: http://remote-service.com
                        connectTimeout: 5000
                        readTimeout: 5000
                        loggerLevel: full
                        errorDecoder: com.example.SimpleErrorDecoder
                        retryer: com.example.SimpleRetryer
                        defaultQueryParameters:
                            query: queryValue
                        defaultRequestHeaders:
                            header: headerValue
                        requestInterceptors:
                            - com.example.FooRequestInterceptor
                            - com.example.BarRequestInterceptor
                        responseInterceptor: com.example.BazResponseInterceptor
                        dismiss404: false
                        encoder: com.example.SimpleEncoder
                        decoder: com.example.SimpleDecoder
                        contract: com.example.SimpleContract
                        capabilities:
                            - com.example.FooCapability
                            - com.example.BarCapability
                        queryMapEncoder: com.example.SimpleQueryMapEncoder
                        micrometer.enabled: false

两种方式的比较

前提知识:

  • 一个项目中可以使用多个@FeignClient(name值不一样)接口调用不同的服务提供者
  • 如下
一个项目中也可以有多个带@FeignClient注解的接口调用同一个服务提供者,即是
@FeignClient的名字name可以相同,但是必须要有contextId。如果没有配置
contextId,项目启动时会报错!

在这里插入图片描述
官方解释:

If we want to create multiple feign clients with the same name or url so 
that they would point to the same server but each with a different custom 
configuration then we have to use contextId attribute of the @FeignClient 
in order to avoid name collision of these configuration beans.
@FeignClient(contextId = "fooClient", name = "stores", configuration = FooConfiguration.class)
public interface FooClient {
    //..
}
@FeignClient(contextId = "barClient", name = "stores", configuration = BarConfiguration.class)
public interface BarClient {
    //..
}

java代码方式:可以针对每一个@FeignClient接口作定制化配置,只需要编写不同的配置类,然后配置到@FeignClien的属性configuration中即可

配置文件的方式:针对所有的@FeignClient接口。

同时使用,默认情况下,配置文件方式会覆盖java代码方式,当然,也可以更改这种优先级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[拆轮子] PaddleDetection中__shared__、__inject__ 和 from_config 三者分别做了什么

在上一篇中,PaddleDetection Register装饰器到底做了什么 https://blog.csdn.net/HaoZiHuang/article/details/128668393 已经介绍了 __shared__ 和 __inject__ 的作用: __inject__ 表示引入全局字典中已经封装好的模块。如loss等。__shared__为了实现一些参数的配…

excel函数技巧:函数TEXT七助数据大变身

如果函数有职业,那各函数的职业会是什么呢?别的先不说,就拿TEXT而言,它可以让日期变数字、数字变日期、阿拉伯数字变大写中文数字、金额元变万元,连IF的条件判断它也可以变出来…这简直就是当之无愧的变装女皇啊&#…

从0到1完成一个Node后端(express)项目(三、写接口、发起请求)

往期 从0到1完成一个Node后端(express)项目(一、初始化项目、安装nodemon) 从0到1完成一个Node后端(express)项目(二、下载数据库、navicat、express连接数据库) 写接口 我们看ex…

关于Linux部署Tomcat的访问问题

文章目录1.问题2.排除问题2.1检查Tomcat是否启动2.2检查防火墙&端口3.其他可能的问题3.1java的配置问题3.2可能出现了端口占用问题1.问题 在CentOS7系统的主机中配置好了Tomcat后发现通过默认端口无法访问到(http://xx:xx:xx:xx:8080) 2.排除问题 …

C语言在杨氏矩阵中找一个数

这道题大家都会做,使用暴力算法遍历整个数组。但是题目要求时间复杂度小于O(n),这样做显然不合题意,所以,通过分析杨氏矩阵的特点,我们发现矩阵右上角的那个数为一行中最大的,一列中…

SAP MM 新建移动类型(Movement Type)

一、概念 物料的移动类型(Movement Type)代表了货物的移动,当一个物料做某种移动时,便开始了如下一系列事件: 1、一个物料凭证会被创建,可以被用来作为移动的证明及作为其它任何相关应用的一个信息来源&am…

Jetson nano 入手系列之6—使用qt creator 开发c++ opencv+CSI摄像头人脸检测

Jetson nano 入手系列之6—使用qt creator 开发c opencvCSI摄像头人脸检测1.创建摄像头人脸检测项目1.1 创建并配置项目1.2 编辑文件1.2.1 main.cpp1.2.2 CMakeLists.txt2.构建及编译2.1 直接使用qt creator完成2.2 使用命令行参考文献本系列针对亚博科技jetson nano开发板。 …

一篇文章带你学会MySQL数据库的基本管理

目录 前言 一、数据库的介绍 二、mariadb的安装 三、数据库的开启及安全初始化 四、数据库的基本管理 五、数据库密码更改及破解 六、用户授权 七、数据库的备份 八、phpmyadmin的安装 总结 前言 什么是数据库? 每个人家里都会有衣柜,衣柜是…

前端效果积累 | 酷炫、实用3D地球路径飞行效果实现

📌个人主页:个人主页 ​🧀 推荐专栏:前端开发成神之路 --【这是一个为想要入门和进阶前端开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? &…

【C语言进阶】自定义类型之结构体

目录一:结构体1.1:结构的基础知识: 1.2:结构的声明: 1.3:特殊声明(匿名结构体): 1.4:结构的自引用: 1.5:结构体变量的定义和初始化&am…

springboot 项目自定义log日志文件提示系统找不到指定的文件

自己尝试搭建了一个springboot项目,自定义了log日志文件,启动后报错 Logging system failed to initialize using configuration from logback-spring.xml java.io.FileNotFoundException: E:\code_demo\xxxx\logback-spring.xml (系统找不到指定的文件…

Elasticsearch(二)--Elasticsearch客户端讲解

一、前言 在上一章我们大致了解了下elasticsearch,虽说上次的内容全是八股文,但是很多东西还是非常有用的,这些哪怕往小说作为面试,往大说是可以帮你很快的理解es是个什么玩意儿,所以还是非常推荐大家去看一下上一章内容。 这一章…

【C++】map和set的使用

​🌠 作者:阿亮joy. 🎆专栏:《吃透西嘎嘎》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉关联式容…

码二哥的技术专栏 总入口

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

JVM整理笔记之测试工具JCStress的使用及其注解的应用

文章目录前言如何使用JCStress测试代码JCStress 注解说明前言 如果要研究高并发,一般会借助高并发工具来进行测试。JCStress(Java Concurrency Stress)它是OpenJDK中的一个高并发测试工具,它可以帮助我们研究在高并发场景下JVM&a…

RecyclerView 倒计时和正计时方案

本章内容一.方案制定二.设计三.编码相信不少同学都会在这里栽跟头,在思考这个问题设计了两套方案,而我的项目需求中需要根据业务是否反馈来进行倒计时和正计时的操作。一.方案制定 1.在Adapter中使用CountDownTimer 2.修改数据源更新数据 3.只修改页面展…

leetcode--各种数据结构相关的题

数据结构1.数组(1)找到所有数组中消失的数字(448)(2)旋转图像(48)(3)搜索二维矩阵 II(240)(4)最多能完成排序的块(769)2.栈和队列(1)用栈实现队列(232)&#…

“链引擎”(PBC)计划 | 太保集团长安链应用展示

引言 长安链“链引擎”计划(Powered by Chainmaker)(简称:PBC计划)是由长安链生态联盟发起的一项应用赋能计划,旨在以长安链技术体系为核心支撑,汇聚产业各方力量,为应用方提供技术、品牌、生态等支持&…

面试干货!初级软件测试面试题及答案题库一起奉上

软件测试工程师面试通常要经历技术面以及HR面,HR面一般都是日常问题,面试人可以临场发挥过去,但关乎岗位职责的技术面,可就没那么容易了,尤其是对于很多初次去面试测试岗位的没有任何测试岗位面试经验的转行人员&#…

Java并发面试题

基础知识 并发编程的优缺点 为什么要使用并发编程(并发编程的优点) 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能&#…