RPC框架之OpenFeign快速上手

news2024/11/20 4:51:09

RPC框架之OpenFeign快速上手

  • 1. 快速上手
  • 💖1.1 第一步 引入相关依赖
  • 🦖1.2 第二步 启用OpenFeign功能
  • 🦕1.3 第三步 编写FeignClient
  • 🪼1.4 第四步 使用FeignClient 实现远程调用
  • ✨1.5 验证一下
  • 🍕1.6 原理
  • 2. OpenFeign整合OkHttp步骤
  • 💖2.1 第一步 引入相关依赖
  • 🦖 2.2 开启连接池功能

写个小demo练练手,这里只是用到rpc简单的调用,服务注册都没用,直接就是消费者通过url调用服务生产者

1. 快速上手

💖1.1 第一步 引入相关依赖

<!--OpenFeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>3.1.4</version>
</dependency>
<!--负载均衡组件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.4</version>
</dependency>

🦖1.2 第二步 启用OpenFeign功能

在项目启动类上添加注解 @EnableFeignClients

在这里插入图片描述

🦕1.3 第三步 编写FeignClient

/**
 * value:服务名(接口提供方的服务名)
 * url:手动指定@FeignClient调用的地址
 */
@Repository
@FeignClient(value = "item-service", url = "http://localhost:8081")
public interface ItemClient {
    @PostMapping("/item/hello")
    String hello();
}

服务生产者的服务名称

server.port=8081
spring.application.name=item-service

🪼1.4 第四步 使用FeignClient 实现远程调用


@RestController
public class OrderController {
    @Autowired
    private ItemClient itemClient;
    @PostMapping("/hello")
    public String printMsg(){
        return itemClient.hello();
    }
}

✨1.5 验证一下

在这里插入图片描述

🍕1.6 原理

OpenFeign 是一个基于注解的声明式 HTTP 客户端,它简化了服务间的 HTTP 调用。它是在 Spring Cloud 生态系统中广泛使用的组件之一。

OpenFeign 的原理可以简要概括为以下几个步骤:

  • 定义接口:使用 Java 接口的方式定义需要调用的服务接口。在接口的方法上使用注解来描述请求的相关信息,如请求方法、URL、请求参数等。

  • 生成代理:在应用程序启动时,OpenFeign 根据接口的定义和注解信息生成一个动态代理对象。

  • 发起请求:当应用程序调用接口的方法时,实际上是调用了生成的代理对象的方法。代理对象根据注解信息构建 HTTP 请求,并将请求发送到目标服务。

  • 处理响应:目标服务接收到请求后处理,并返回响应。代理对象将接收到的响应转换为方法返回的数据类型,并返回给应用程序。

OpenFeign 的核心原理是使用动态代理技术,通过在运行时动态生成代理对象来实现服务间的 HTTP 调用。它通过解析接口上的注解信息,生成对应的 HTTP 请求,并将请求发送到目标服务。同时,OpenFeign 还提供了负载均衡、请求重试、容错等功能,以提高服务调用的可靠性和稳定性。

👍总结起来,OpenFeign 的原理是通过动态代理技术生成代理对象,解析注解信息构建 HTTP 请求,并处理响应,从而简化了服务间的 HTTP 调用过程。

在这里插入图片描述

2. OpenFeign整合OkHttp步骤

HTTP 连接池
在HTTP 通信的过程中,建立连接是一个很复杂的过程,涉及到多个数据包的交换,很耗时间,而且HTTP连接需要3次握手和4次挥手开销都很大

这时可以采用HTTP连接池,节约大量的3次握手4次挥手时间,提升吞吐量。

默认的HttpURLConnection是JDK自带的,并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。

  • HttpClient 相比传统JDK自带的HttpURLConnection,它封装了访问HTTP的请求头,参数,内容体,响应等等。它不仅使客户端发送HTTP请求变得容易,而且也方便了开发人员测试接口(基于HTTP协议的),既提高了开发的效率,又提高了代码的健壮性。另外高并发大量的请求网络的时候,也是用"连接池"提升吞吐量。

  • OkHttp作为后期之秀,功能和性能上,可能稍优于HttpClient ,但是几乎没多大区别,实际使用时,都是可以的,不过HttpClient集成起来更方便。

原文链接:https://blog.csdn.net/qq_43437874/article/details/122169675

💖2.1 第一步 引入相关依赖

在原有的基础上添加连接池相关依赖

<!--OpenFeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>3.1.4</version>
</dependency>
<!--负载均衡组件-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.4</version>
</dependency>
<!--连接池-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
    <version>10.12</version>
</dependency>

🦖 2.2 开启连接池功能

# 开启OkHttp 连接池
feign.okhttp.enabled=true

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

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

相关文章

Puppeteer记录操作过程及优秀的开源插件(五)

Puppeteer记录操作过程及优秀的开源插件&#xff08;五&#xff09; Puppeteer记录操作过程及优秀的开源插件&#xff08;五&#xff09;一、简介二、自动生成测试代码三、优秀的开源插件四、参考案例 一、简介 本节我们将介绍通过浏览器工具记录用户的实际操作&#xff0c;并…

SpringBoot面试题4:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个? Spring Boot支持多种日志框架,包括以下几种: Logback:Logback 是一个快速、灵活…

架构真题2017(五十三)

在磁盘上存储数据的排列方式会影响 I/O服务的总时间。假设每磁道划分成10个物理块&#xff0c;每块存放1个逻辑记录。逻辑记录R1&#xff0c;R2&#xff0c; ...&#xff0c; RI0存放在同一个磁道上&#xff0c; 记录的安排顺序如下表所示 ; 假定磁盘的旋转速度为30ms/周&…

SAP MM学习笔记36 - 释放支付保留的发票

SAP中&#xff0c;请求书照合之后&#xff0c;发现不一致&#xff0c;就会支付保留。 支付保留&#xff0c;可以参考如下文章。 SAP MM学习笔记34 - 请求书照合中的支付保留&#xff08;发票冻结&#xff09;_东京老树根的博客-CSDN博客 当然发现不一致之后&#xff0c;如果不…

进阶JAVA篇- ZoneId 类与 ZoneDateTime 类、Instant类的常用API(七)

目录 API 1.0 ZoneId 类的说明 1.1 如何创建 ZoneId 类的对象呢&#xff1f; 1.2 ZoneId 类中的 getAvailableZoneIds() 静态方法 2.0 ZoneDateTime 类的说明 2.1 如何创建 ZoneDateTime 类的对象呢&#xff1f; 3.0 Instant 类的说明 3.1 如何创建 Instant 类的对象呢…

【初始C语言8】详细讲解初阶结构体的知识

前言 &#x1f493;作者简介&#xff1a; 加油&#xff0c;旭杏&#xff0c;目前大二&#xff0c;正在学习C&#xff0c;数据结构等&#x1f440; &#x1f493;作者主页&#xff1a;加油&#xff0c;旭杏的主页&#x1f440; ⏩本文收录在&#xff1a;再识C进阶的专栏&#x1…

模型UV纹理设置工具

1、什么是模型UV纹理&#xff1f; 模型的UV纹理是将二维纹理图映射到三维模型表面的过程。UV纹理可以为模型赋予颜色、纹理、细节和其他效果&#xff0c;使其看起来更加逼真。 2、UV纹理的原理 下面是模型UV纹理的详细原理介绍&#xff1a; UV坐标系统&#xff1a;UV坐标系统…

2.算法-Python模拟退火算法实例

题记 下面是python编写的模拟退火算法实例&#xff0c;包括全过程和解析。 编写main.py文件 main.py文件如下&#xff1a; import math import random# 初始解&#xff1a;算法从问题的解空间中随机选择一个初始解作为当前解。 # 目标函数&#xff1a;算法需要优化的目标函数…

【Docker】Docker的使用案例以及未来发展、Docker Hub 服务、环境安全、容器部署安全

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

【算法学习】-【滑动窗口】-【将 x 减到 0 的最小操作数】

LeetCode原题链接&#xff1a;1658. 将 x 减到 0 的最小操作数 下面是题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 x 。每一次操作时&#xff0c;你应当移除数组 nums 最左边或最右边的元素&#xff0c;然后从 x 中减去该元素的值。请注意&#xff0c;需要 修改 数…

通过示例详细了解ES6导入导出模块

通过示例详细了解ES6导入导出模块 似乎许多开发人员认为 ES6 模块只不过是export、import关键字。事实上&#xff0c;它更加多样化。它拥有强大的功能和鲜为人知的问题。在本文中&#xff0c;我们将使用一些示例来了解这些内容。 示例一 // index.mjs import { default } fr…

【STL】容器适配器stack和queue常见用法及模拟实现

目录 1.stack介绍及使用1.1 stack的介绍1.2 stack使用 2. stack模拟实现3. queue介绍及使用3.1 queue的介绍4. queue模拟实现 5. 栈和队列使用不同默认适配器的区别6. dequeue原理简单介绍6.1 dequeue底层实现6.2 dequeue的缺点 1.stack介绍及使用 1.1 stack的介绍 stack文档介…

每天debug/run一键启动的Spring Boot控制台启动日志,你了解过吗?

文章目录 前言JDK执行Spring Boot应用的启动命令Spring Boot本身启动时的日志总结 前言 每次打开Idea点击debug/run启动SpringBoot项目时&#xff0c;都在坐等启动成功的最后一行日志&#xff0c;然而对于启动过程中&#xff0c;控制台里面的每一行日志代表什么&#xff1f;你…

论文学习——FALL-E:GAUDIO FOLEY SYNTHESIS SYSTEM

文章目录 引言正文AbstractIntroduction介绍问题 FALL-E2.1 Architexture结构2.2 Training and Inference Details 3 Evaluation And Analysis测试和分析Conlusion 总结 引言 这篇文章是DCASE中少有的&#xff0c;没有使用DIffusion的方法&#xff0c;可以学习一下。这篇文章的…

『C++之STL』双端队列 - deque

前言 双端队列,Double-ended queue,简称为deque是一种线性结构的一种容器; 在数据结构中出现的顺序表与链表,或者栈与队列都算是线性结构; 在结构中,它与vector相比较会相似一些; 但是在实际当中,双端队列 - deque 包含了vector与list的优点; vector(顺序表) 支持随机访问,空…

cuda12+vs2019环境搭建 发疯实录

点击exe文件后开始安装&#xff08;注意更改默认安装的位置&#xff09; 在选项阶段&#xff0c;全选所有的选项 出现的问题&#xff0c;这里显示未安装 进一步地查看原因 可能式对应的版本下载错误 如何寻找到所需要的版本并进行下载&#xff1f; 在上述参考链接中进行搜…

阿里云韩国服务器测试IP地址及公网带宽收费价格表

阿里云服务器韩国&#xff08;首尔&#xff09;地域公网带宽价格表&#xff0c;1M带宽价格是23.0元/月&#xff0c;按使用流量1GB价格是0.8元&#xff0c;阿里云韩国服务器测试IP地址&#xff1a;149.129.12.20&#xff0c;阿里云百科aliyunbaike.com来详细说下阿里云韩国服务器…

mybatis用拦截器实现字段加解密

前言 根据公司业务需要&#xff0c;灵活对客户敏感信息进行加解密&#xff0c;这里采用mybatis拦截器进行简单实现个demo。 拦截器的使用 // 执行 Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) // 请求参数处理 Paramete…

基于蛾群优化的BP神经网络(分类应用) - 附代码

基于蛾群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蛾群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蛾群优化BP神经网络3.1 BP神经网络参数设置3.2 蛾群算法应用 4.测试结果&#xff1a;5.M…

常用的数字格式代码

文章目录 数值占位符文本占位符 两类占位符: 数值占位符, 文本占位符. 数值占位符 有三种&#xff1a;0&#xff0c;#&#xff0c;&#xff1f; 0 是强制的占位符。 文本占位符 文本占位符只有一个&#xff1a; : 作用于文本的占位符&#xff0c;可以用英文引号" &quo…