OpenFeign微服务调用组件

news2025/1/5 10:46:30
一、跨服务、跨进程调用方式

1)Httpclient

使用Httpclient我们首先需要引入依赖

<dependency>  
      <groupId>org.apache.httpcomponents</groupId>   
      <artifactId>httpclient</artifactId>   
      <version>4.5.13</version>
</dependency>
@Bean 
 public RestTemplate restTemplate(){  
   RestTemplate restTemplate = new RestTemplate();  
   HttpComponentsClientHttpRequestFactory clientHttpRequestFactory 
     = new HttpComponentsClientHttpRequestFactory(); 
    restTemplate.setRequestFactory(clientHttpRequestFactory); 
     return restTemplate; 
}

2)Okhttp

一个处理网络请求的开源项目,是安卓端最火的轻量级框架,由 Square 公司贡献,用于替代 HttpUrlConnection 和 Apache HttpClient。OkHttp 拥有简洁的 API、高效的性能,并支持多种协议(HTTP/2 和 SPDY)。

3)HttpURLConnection

HttpURLConnection 是 Java 的标准类,它继承自 URLConnection,可用于向指定网站发送 GET 请求、POST 请求。HttpURLConnection 使用比较复杂,不像 HttpClient 那样容易使用。

4)RestTemplate WebClient

RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 HTTP 服务的方法,能够大大提高客户端的编写效率。

RestTemplate默认使用的是SimpleClientHttpRequestFactory工厂

二、Spring Cloud Alibaba快速整合OpenFeign

1)引入依赖

<!-- openfeign 远程调用 -->
<dependency>   
      <groupId>org.springframework.cloud</groupId>  
      <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2)编写调用接口+@FeignClient注解

3)调用端在启动类上添加@EnableFeignClients注解

4)发起调用,像调用本地方式一样调用远程服务

三、自定义配置

日志配置

有时候我们遇到 Bug,比如接口调用失败、参数没收到等问题,或者想看看调用性能,就需要配置 Feign 的日志了,以此让 Feign 把请求信息输出来。

Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。说白了就是对Feign接口的调用情况进行监控和输出

通过源码可以看到日志等级有 4 种,分别是:

NONE【性能最佳,适用于生产】

:不记录任何日志(默认值)。

BASIC【适用于生产环境追踪问题】

:仅记录请求方法、URL、响应状态代码以及执行时间。

HEADERS

:记录BASIC级别的基础上,记录请求和响应的header。

FULL【比较适用于开发及测试环境定位问题】

:记录请求和响应的header、body和元数据。

1)全局配置

注意一:此处配置@Configuration注解就会全局生效,如果想指定对应某一个服务生效,就不能配置.

注意二: 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出,一定要结合 logging.level.com.beiyou = debug

@Configuration
public class FeignConfig
{
    @Bean
    Logger.Level feignLoggerLevel()
    {
        return Logger.Level.FULL;
    }
}

2)局部配置

局部配置,让调用的微服务生效,在@FeignClient 注解中指定使用的配置类

3)在配置文件中配置

logging.level.com.beiyou = debug 开启日志

超时配置

通过 Options 可以配置连接超时时间和读取超时时间,Options 的第一个参数是连接的超时时间(ms),默认值是 2s;第二个是请求处理的超时时间(ms),默认值是 5s。

1)全局配置

@Bean
public Request.Options options() {
    return new Request.Options(5l, TimeUnit.SECONDS, 10l, TimeUnit.SECONDS, true);
}

2)配置文件中配置

#feign.client.config.order-service.connectTimeout=5000
#feign.client.config.order-service.readTimeout=10000
四、Feign和OpenFeign的区别是什么?

OpenFeign是在Feign的基础上进行了增强,使其能够支持Spring mvc注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便。

五、OpenFeign的执行原理?

OpenFeign 是一个声明式的 HTTP 客户端,它简化了编写 HTTP 请求的过程。其原理可以概括为以下几个步骤:

1. 定义接口:首先,您需要定义一个 Java 接口,该接口包含要调用的远程服务的方法。这些方法使用注解来描述请求的 URL、HTTP 方法、请求头、请求体等信息。

2. 创建代理:OpenFeign 使用动态代理技术,根据定义的接口创建一个代理对象。该代理对象可以将接口中的方法调用转化为对远程服务的 HTTP 请求。

3. 构建请求:当您调用代理对象的方法时,OpenFeign 会根据方法的注解信息构建一个 HTTP 请求。这包括请求的 URL、HTTP 方法、请求头、请求体等。

4. 发送请求:OpenFeign 使用底层的 HTTP 客户端(如 Apache HttpClient 或 OkHttp)发送构建的 HTTP 请求到远程服务。

5. 处理响应:一旦远程服务返回响应,OpenFeign 将根据定义的接口方法的返回类型,将响应转化为相应的 Java 对象,并返回给调用方。

总体来说,OpenFeign 的原理就是通过定义接口和注解来描述远程服务的调用方式,然后通过代理对象将方法调用转化为 HTTP 请求,并处理远程服务的响应。这样,您就可以像调用本地方法一样简单地调用远程服务。

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

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

相关文章

Meta/东京电子/FPT软件等共同贡献,Aitomatic发布首个半导体行业开源大模型,「锁死」企业技术自主权

2024 年初&#xff0c;研究机构 Market.us 发布报告预测&#xff0c;全球半导体市场规模将大幅增长&#xff0c;预计 2024 年可达到 6,731 亿美元&#xff0c;到 2032 年预计将增长至 1.3 万亿美元。 毫无疑问&#xff0c;这个万亿级市场与充满想象空间的 AI 密不可分。技术层…

【根号分治】 通知

通知 分析&#xff1a; 这道题根号分治看起来就没有前面几题那么明显了 emm当然也可能是我境界还没到 我们考虑如果暴力修改&#xff0c;复杂度是 O ( n m ) O(nm) O(nm)&#xff0c;其实m为这个点的度数 考虑根号分治的思想&#xff0c;我们令 m M m\sqrt M mM ​ 并命度数大…

申瓯通信设备有限公司在线录音管理系统(复现过程)

漏洞简介 申瓯通信设备有限公司在线录音管理系统 index.php接口处存在任意文件读取漏洞&#xff0c;恶意攻击者可能利用该漏洞读取服务器上的敏感文件&#xff0c;例如客户记录、财务数据或源代码&#xff0c;导致数据泄露 一.复现过程 fofa搜索语句:title"在线录音管…

idea显示properties文件中文乱码的解决方法

1.如下 File-》Settings-》File Encodings,修改如下图中绿框标注的内容 2.点击Apply-->OK 3.修改完成后显示

ROS八股

目录 一、ros1和ros2的区别是什么&#xff1f; 二、rostopic 和 rosserver的区别是什么&#xff1f; 三、讲一下ros的navigation框架 一、ros1和ros2的区别是什么&#xff1f; ROS 1和ROS 2是两个主要版本的机器人操作系统&#xff0c;它们在多个方面存在显著差异&#xff…

【Stable Diffusion】(基础篇七)—— lora

lora 本系列博客笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 除了大模型和VAE之外&…

MySQL:集合运算符

集合运算符 MySQL中的 集合运算符&#xff08;Set operators&#xff09;主要用于结合两个或多个SELECT语句的结果集&#xff0c;这些结果集应该具有相同的列数和数据类型&#xff0c;以便能够进行比较或合并。 需要注意的是&#xff0c;MySQL本身并没有直接称为“Set operat…

Flask目录结构路由重定向简单实例讲解——轻量级的 Python Web 框架

假设一个flask目录结构如下&#xff1a; my_flask_app/ │ ├── app.py ├── routes/ │ ├── __init__.py │ ├── ZhejiangProvince/ │ │ ├── __init__.py │ │ ├── la.py │ │ └── el.py │ ├── GuangdongProvince/ │ │ ├…

常见服务限流方法

一、令牌桶算法&#xff08;Token Bucket&#xff09; 原理其实很简单&#xff0c;就是设置同一时刻服务器能处理请求的最大数量&#xff0c;如果超过这个数据&#xff0c;则需要等待&#xff0c;或者不处理请求。相当于设置最大并发量&#xff0c;但是细节是&#xff0c;还设…

解决nginx端口转发后,获取不到真实IP问题

文章目录 1&#xff0c;设置nginx端口转发1.2&#xff0c;无法获取客户端真实IP 2&#xff0c;nginx配置文件增加配置&#xff0c;保留客户端信息2.2&#xff0c;可以看到真实IP信息 1&#xff0c;设置nginx端口转发 location /AWAPI/ {proxy_pass http://172.28.43.19:9607; …

组件化开发

1.组件化开发 组件化&#xff1a;一个页面可以拆分成一个个组件&#xff0c;每个组件有着自己独立的结构[html]、样式[css]、行为 [js]。好处&#xff1a;便于维护&#xff0c;利于复用 → 提升开发效率。组件分类&#xff1a;普通组件、根组件。比如&#xff1a;下面这个页面…

二级MySQL(十二)——分组聚合查询

首先整理常用的聚合函数&#xff1a; 函数名说明COUNT&#xff08;*&#xff09;记录数COUNT&#xff08;列名&#xff09;一列的记录数MAX&#xff08;列名&#xff09;一列的最大值 MIN&#xff08;列名&#xff09; 一列的最小值 SUM&#xff08;列名&#xff09;一列…

M12电连接器航插插座L-code

M12电连接器概述 M12电连接器是一种广泛应用于工业自动化、传感器、仪器仪表、数据通信和控制系统等领域的圆形连接器。它的核心特点在于其小巧的尺寸、强大的多信号传输能力和出色的防水性能&#xff0c;使其成为众多工业应用的首选。M12连接器通常具有3至12个引脚&#xff0…

redis主从复制、哨兵模式、集群

redis集群 高可用 redis集群的三种模式&#xff1a; 1.主从复制&#xff08;奇书 3台 一主两从&#xff09; 2.哨兵模式 &#xff08;3台 一主两从&#xff09; 3.cluster &#xff08;集群 6 333&#xff09; 主从复制&#xff1a;喝MySQL的主从复制类似&#xff0c;主可以写…

vite创建Vue2项目(配图详细)

参考文章&#xff1a;vite项目生成vue3并引入element-ui vite脚手架生成vue项目及其配置_viteconfig配置-CSDN博客 Vite 默认支持 Vue 3&#xff0c;但你也可以使用 Vite 来搭建 Vue 2 的项目。不过&#xff0c;这需要一些额外的配置&#xff0c;因为 Vue 2 不支持原生的 ES …

【电子通识】什么是SIM卡/eSIM?

什么是SIM卡。 1991年&#xff0c;世界第一张SIM卡被德国捷德公司开发&#xff0c;当时的SIM卡非常大&#xff0c;和银行IC卡一样&#xff1a; SIM卡的全名是“用户识别模块”&#xff08;Subscriber Identity Module&#xff09;&#xff1a;这块镀金的电路芯片拥有身份识别功…

请大家监督:我要开启Python之路,首要任务最简单的搭建环境

任务说明&#xff1a; 如上图所示&#xff0c;Python稳稳第一&#xff0c;为何&#xff1f;因为Python可以做很多事情&#xff0c;比如&#xff1a;Web开发&#xff0c;网络爬虫&#xff0c;软件开发、数据分析、游戏开发&#xff0c;金融分析&#xff0c;人工智能与机器学习&a…

Java每日面试题(事务相关)(day5)

目录 什么是事务&#xff1f;spring事务的实现方式事务失效的8种情况 什么是事务&#xff1f; 事务是一个操作序列&#xff0c;要么全部执行成功&#xff0c;要么全部执行失败。事务有四个重要特性&#xff0c;称为 ACID 特性&#xff1a; Atomicity&#xff08;原子性&#x…

从教学到分享,2024精选录屏工具

如果你在公司里承担会议记录的职责&#xff0c;那录屏这项技能你一定要学会。像录屏大师这样的工具可以帮你在远程会议中进行录屏操作&#xff0c;方便你后期整理会议内容。 1.福昕录屏大师 链接直达&#xff1a;https://www.foxitsoftware.cn/REC/ 这款录屏工具提供了多种…