SpringCloud 核心组件Feign【远程调用自定义配置】

news2025/7/18 8:23:49

目录

1,Feign远程调用

1.1:Feign概述

1.2:Feign替代RestTemplate

        1):引入依赖

        2):添加注解

        3):编写Feign的消费服务,提供服务

        4):测试

        5):总结

1.3:自定义配置

1.3.1:配置文件方式

1.3.2:Java代码方式


1,Feign远程调用

1.1:Feign概述

Feign是一款Java语言编写的HttpClient绑定器,在Spring Cloud微服务中用于实现微服务之间的声明式调用。Feign 可以定义请求到其他服务的接口,用于微服务间的调用,不用自己再写http请求(eg:使用spring自带的restTemplate或者httpClinents工具构建http请求调用第三方服务接口,在客户端实现,调用此接口就像远程调用其他服务一样,当请求出错时可以调用接口的实现类来返回

Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。

创建接口,为接口添加注解,即可使用Feign。

Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。

Spring Cloud为Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka来为使用Feign时提供负载均衡。

1.2:Feign替代RestTemplate

先来看我们以前利用RestTemplate发起远程调用的代码

存在下面的问题:

•代码可读性差,编程体验不统一

•参数复杂URL难以维护

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign

其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

 

 

        1):引入依赖

我们在order-service服务的pom文件中引入feign的依赖:

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

        2):添加注解

在order-service的启动类添加注解开启Feign的功能:

@SpringBootApplication
@EnableDiscoveryClient  //服务发现
@EnableFeignClients  //开启远程调用
public class TestNacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestNacosConsumerApplication.class, args );
    }
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

        3):编写Feign的消费服务,提供服务

消费服务调用提供服务

消费服务Feign接口,用来请求提供服务

service-consumer服务:

编写Controller层调用Feign:

@RestController
@RequestMapping("/feign")
public class TestFeignController {
    @Resource
    private EchoFeign echoFeign;
    @GetMapping("/echo")
    public String echo(){
        //调用Feign
        String echo = echoFeign.tudou();
        return "consumer-->"+echo;
    }
}

编写Feign接口:

@FeignClient(value = "service-provider",path = "test")
public interface EchoFeign {
    @GetMapping("/tudou")
    public String tudou() ;
}

 service-provider服务:

编写Controller层提供被调用:

@RestController
@RequestMapping("/test")
public class EchoController {
    @Resource
    private HttpServletRequest request;
    @Resource
    private PatternProperties patternProperties;
    @GetMapping("/tudou")
    public String tudou() {
        int serverPort = request.getServerPort();
        System.out.println(serverPort);
        return "你好nacos服务,我是爱吃豆的土豆 " + ":" + serverPort;
    }

        4):测试

        访问路径访问消费服务,得到提供服务的结果:http://localhost:8071/feign/echo

 

 

 

        5):总结

使用Feign的步骤:

① 引入依赖

② 添加@EnableFeignClients注解

③ 编写FeignClient接口

④ 使用FeignClient中定义的方法代替RestTemplate

1.3:自定义配置

Feign可以支持很多的自定义配置,如下表所示:

类型作用说明
feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送
feign. Contract支持的注解格式默认是SpringMVC的注解
feign. Retryer失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可。

下面以日志为例来演示如何自定义配置。

1.3.1:方式一配置文件方式

基于配置文件修改feign的日志级别可以针对单个服务:局部生效

feign:  
  client:
    config: 
      userservice: # 针对某个微服务的配置
        loggerLevel: FULL #  日志级别 

 也可以针对所有服务:全局生效

feign:  
  client:
    config: 
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: FULL #  日志级别 

而日志的级别分为四种:

  • NONE:不记录任何日志信息,这是默认值。

  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间

  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息

  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

 

1.3.2:方式二Java代码方式

也可以基于Java代码来修改日志级别,先声明一个类,然后声明一个Logger.Level的对象:

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // 日志级别为BASIC
    }
}

如果要**全局生效**,将其放到启动类的@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

 如果是**局部生效**,则把它放到对应的@FeignClient这个注解中:

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class)

总结:

Feign的日志配置:

1. 方式一是配置文件, feign.client.config.xxx.loggerLevel
如果 xxx default 则代表全局
如果 xxx 是服务名称,例如 userservice 则代表某服务
2. 方式二是 java 代码配置 Logger.Level 这个 Bean
如果在 @EnableFeignClients 注解声明则代表全局
如果在 @FeignClient 注解中声明则代表某服务

 

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

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

相关文章

C. Discrete Acceleration(浮点二分)

Problem - 1408C - Codeforces 题意: 有一条长度为l米的道路。路的起点坐标为0&#xff0c;路的终点坐标为l。 有两辆汽车&#xff0c;第一辆站在路的起点&#xff0c;第二辆站在路的终点。它们将同时开始行驶。第一辆车将从起点开到终点&#xff0c;第二辆车将从终点开到起…

通俗易懂的React事件系统工作原理

前言 React 为我们提供了一套虚拟的事件系统&#xff0c;这套虚拟事件系统是如何工作的&#xff0c;笔者对源码做了一次梳理&#xff0c;整理了下面的文档供大家参考。 在 React事件介绍 中介绍了合成事件对象以及为什么提供合成事件对象&#xff0c;主要原因是因为 React 想…

【附源码】Python计算机毕业设计图书商城购物系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

MongoDB学习一:相关概念和单机部署

目录一、MongoDB 应用场景&#xff1a;二、什么时候使用MongoDB&#xff1a;三、MongoDB简介&#xff1a;四、体系结构&#xff1a;五、数据模型&#xff1a;六、MongoDB的特点&#xff1a;七、MongoDB单机部署一、MongoDB 应用场景&#xff1a; 二、什么时候使用MongoDB&#…

对FD描述符(包括inode以及三张表)的一点理解

文件描述符&#xff0c;简单来说是一个从0开始递增的非负整数。 具体来说是linux/unix对文件系统的一种底层抽象&#xff0c;这种抽象是通过三张表来实现的。 这三张表分别是&#xff1a; 1.进程级的文件描述符表&#xff1b;(文件标志位/文件指针) 2.系统级的打开文件描述…

Android Studio App开发之下载管理器DownloadManager中显示、轮询下载进度、利用POST上传文件讲解及实战(附源码)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、在通知栏显示下载进度 利用GET方式读取数据有很多缺点比如1&#xff1a;无法端点续传 一旦中途失败只能重新获取 2&#xff1a;不是真正意义上的下载操作 无法设置参数 3&#xff1a;下载过程中无法在界面上上展示下…

NAFNet(ECCV 2022)-图像修复论文解读

文章目录解决问题算法背景Simple BaselinePlain Block归一化激活函数Attention机制总结NAFNetSimpleGate替换GELUSCA替换CA总结实验应用RGB图像去噪图像去模糊RAW图像去噪结论论文: 《Simple Baselines for Image Restoration》github: https://github.com/megvii-research/NAF…

同事:这个页面的逻辑没什么能复用的,不抽组件也没什么影响吧?

前言 最近在维护同事的一个项目时&#xff0c;发现有不少单个vue文件一千余行&#xff0c;同一个文件上有倒计时、有输入信息的表单&#xff1b; 当时我就在想&#xff1a;是不是策划经常改需求或者排期紧急&#xff0c;所以没抽组件呢。 沟通过程 以下同事称为阿A 我&#…

【附源码】计算机毕业设计JAVA家庭理财管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

Java基础—Document类型的变化

Document类型的变化 Document类型的变化中唯一与命名空间无关的方法是importNode()。这个方法的用途是从一个文档中取得一个节点&#xff0c;然后将其导入到另一个文档&#xff0c;使其成为这个文档结构的一部分。需要注意的是&#xff0c;每个节点都有一个ownerDocument属性&…

G1D13-Apt论文阅读fraudgitKGbookrce33-36php环境搭建

一、APT论文 今天终于把6个模型论文和一篇综述读完了&#xff01;&#xff01;&#xff01; 今天主要读了一篇论文写了个总表。发现之前读的论文都忘了&#xff0c;所以 明天要复习一下模型&#xff0c;记录在文档中&#xff0c;并完善模型对比的总表&#xff0c;并且把代码下…

[附源码]java毕业设计基于web的建筑合同管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

嵌入式FreeRTOS学习九,任务链表的构成,TICK时间中断和任务状态切换调度

一. tskTaskControlBlock 函数结构体 在tskTaskControlBlock 任务控制块结构体中&#xff0c;其中有任务状态链表和事件链表两个链表成员&#xff0c;首先介绍任务状态链表这个结构&#xff0c;这个链表通常用于管理不同状态的任务&#xff1b;通常&#xff0c;操作系统任务有…

CPU、内存、磁盘性能监控

CPU监控 网络由设备、服务器、路由器、交换机和其他网络组件组成。CPU 是网络中所有硬件设备的组成部分。它负责设备的稳定性和性能。企业严重依赖网络&#xff0c;企业硬件的处理能力决定了网络的容量。随着 CPU 功能和硬件的快速发展&#xff0c;组织必须规划其容量并监控其…

成功上岸,刚转行自学Python的小姑娘,每个月入1W+......

我是一名2020年毕业的本科生&#xff0c;大学学的专业是机械设计制造及其自动化。 在大学期间&#xff0c;觉得机械专业实在枯燥无味&#xff0c;没有一点点成就感&#xff0c;每天就是画图纸&#xff0c;测量零件&#xff0c;计算数据&#xff0c;一切都是纸上谈兵。但凡有因…

甲氧基PEG多巴胺DPA-mPEG,Dopamine-mPEG,PEG化的多巴胺具有良好的水溶性

英文名称&#xff1a;mPEG-DPA mPEG-Dopamine 中文名称&#xff1a;甲氧基-聚乙二醇-多巴胺 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k 产地&#xff1a;广州 品牌&#xff1a;为华生物 存储条件&#xff1a;≤-4℃低温干燥保存…

Netty-实验

Netty应用实例-群聊系统 实例要求&#xff1a; &#xff08;1&#xff09;编写一个Netty群聊系统&#xff0c;实现服务端和客户端之间的数据简单通讯&#xff08;非阻塞&#xff09; &#xff08;2&#xff09;实现多人群聊 &#xff08;3&#xff09;服务器端&#xff1a;可…

论文阅读笔记 | 三维目标检测——PointRCNN

如有错误&#xff0c;恳请指出。 文章目录1. 背景2. 网络结构2.1 Proposal Generation2.2 Proposal Refinement3. 实验部分3.1 kitti上的测评3.2 消融实验paper&#xff1a;《PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud》文章比较复杂&#xff…

一文详解Redis企业版软件!

一、Redis企业版软件概述 Redis企业版软件&#xff08;Redis Enterprise&#xff09;是企业级的数据库软件&#xff0c;也是一款实时数据平台&#xff0c;为全球超过8500家知名企业提供实时数据服务。具有线性可扩展性、高可用性、持久性、备份和恢复、地理分布、分层内存访问…

WhatsApp群发系统-SendWS拓客系统功能后台介绍(五):WhatsApp筛号群发,群发超链

WhatsApp群发系统 基于WhatsApp进行群发功能&#xff0c;将品牌和产品推送给全世界各地的人们或者选择筛选好的用户&#xff0c;进行针对性的群发&#xff0c;提升了品牌和产品的影响力&#xff0c;让更多人了解认识品牌&#xff0c;帮助客户低成本实现WhatsApp营销精准拓客。…