微服务远程调用openFeign简单回顾

目录

一. OpenFeign简介

二. OpenFeign原理

演示使用

provider模块

 消费者模块

 配置全局feign日志

示例源代码:


一. OpenFeign简介


OpenFeign是SpringCloud服务调用中间件,可以帮助代理服务API接口。并且可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

二. OpenFeign原理


添加@EnableFeignClients注解开启对@FeignClient注解的扫描加载处理。根据Feign Client的开发规范,定义接口并添加@FeiginClient注解

当程序启动之后,会进行包扫描,扫描所有@FeignClient注解的接口,并将这些信息注入到IOC容器中。当定义的Feign接口被调用时,通过JDK的代理的方式生成具体的RequestTemplate。Feign会为每个接口方法创建一个RequestTemplate对象。该对象封装了HTTP请求需要的所有信息,例如请求参数名、请求方法等信息。

然后由RequestTemplate生成Request,把Request交给Client去处理,这里的Client可以是JDK原生的URLConnection、HttpClient或Okhttp。最后Client被封装到LoadBalanceClient类,看这个类的名字既可以知道是结合Ribbon负载均衡发起服务之间的调用,因为在OpenFeign中默认是已经整合了Ribbon了。

演示使用

创建一个简单springcloud项目,有两个模块consumer(消费者)和provider(生产者)模块

两个模块都需要注册进nacos注册中心,也可以使用其他的注册中心比如Apollo或者Eureka等,这里演示使用nacos

注册配置naocs具体步骤不再演示,可以查看博主之前文章进行注册配置

引入openFeign依赖

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

provider模块

配置:

书写生产者测试接口:

 

 消费者模块

配置:

 启动两个模块查看是否注册进nacos中

 消费者主启动类中添加远程调用注解

 书写feign调用接口

控制层调用feign接口

 

 测试:

 

 配置全局feign日志

feign的调用日志需要单独进行配置,这样服务之间进行调用时才可以看到服务之间调用的日志信息

书写feign日志配置类

由于springboot默认日志级别是info, feign的debug日志级别就不会输出,所以还需要在配置中调整feign的debug级别打印

 重启测试:

查看控制台可以看到服务调用接口的信息:

 

示例源代码:

源代码
密码:h6kp

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习day52

1.关于 error Component name "School" should always be multi-word vue/multi-word-component-names 这里是因为脚手架的规范原因&#xff0c; 解决办法&#xff1a; 我是在vue.comfig.js文件中加入了一条配置&#xff0c;即 lintOnSave:false 整个文件的完整…

Java 实现提取富文本中包含特定字符串的图片 src 属性值

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

Nginx配置server_name讲解

文章目录 1.Nginx配置中没有server_name会怎样&#xff1f;2.Nginx配置server_name的匹配规则3.正则表达式规则 1.Nginx配置中没有server_name会怎样&#xff1f; 此时Nginx会自动设置成 server_name ""; 它不会匹配任何域名&#xff0c;导致Nginx会优先将HTTP请求交…

Cesium态势标绘专题-弓形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

3分钟,快速上手Postman接口测试

Postman是一个用于调试HTTP请求的工具&#xff0c;它提供了友好的界面帮助分析、构造HTTP请求&#xff0c;并分析响应数据。实际工作中&#xff0c;开发和测试基本上都有使用Postman来进行接口调试工作。有一些其他流程的工具&#xff0c;也是模仿的Postman的风格进行接口测试工…

Unity 性能优化一:性能标准、常用工具

性能标准 推荐耗时&#xff1a; 性能提现到玩家直观感受&#xff0c;就是帧率&#xff0c;为了达到要求的帧率&#xff0c;就要控制CPU的耗时&#xff0c;不同类型的游戏&#xff0c;对帧率要求不一样。下面是推荐耗时&#xff1a; 推荐内存&#xff1a; 避免游戏闪退的重点…

云服务器AccessKey执行命令

人之所以痛苦&#xff0c;在于追求错误的东西。如果你不给自己烦恼&#xff0c;别人也永远不可能给你烦恼。因为你自己的内心&#xff0c;你放不下。 好好的管教你自己&#xff0c;不要管别人。 漏洞实战 查看所有实例信息 A.exe -a xxx -s xxx ecs -list执行命令 A.exe -a…

SpringBoot整合Dubbo+Zookeeper

文章目录 实践前知识储备Dubbo概述安装zkDubbo在zk中的存储结构Dubbo的注册中心有哪些Dubbo支持的协议 Dubbo整合SpringBoot本案例工程结构具体实现开发两个接口进行测试实现步骤测试 实践前知识储备 Dubbo概述 学习Dubbo前你要了解这些 安装zk Zookeeper概述与安装 Dubbo…

视频的音频提取怎么做?这样提取很简单

提取视频中的音频通常在需要从视频中独立使用音频或需要对音频进行编辑时使用。例如&#xff0c;当我们需要将音频上传到音乐流媒体平台或将其用于播客或其他音频项目时&#xff0c;就可能需要从视频中提取音频。问题是该怎么提取呢&#xff1f;教给大家几种简单的提取方法&…

Nodejs 安装之后cmd 输入npm -v 提示error的问题解决

1.问题现象&#xff1a; 安装时候选择&#xff1a; 2. 解决问题 卸载nodejs 删除安装路径下的node_modules, 重新安装 按照下面的选择

科技与人元宇宙论坛跨界对话

近来&#xff0c;“元宇宙”成为热门话题&#xff0c;越来越频繁地出现在人们的视野里。大家都在谈论它&#xff0c;但似 乎还没有一个被所有人认同的定义。元宇宙究竟是什么&#xff1f;未来它会对我们的工作和生活带来什么样 的改变&#xff1f;当谈论虚拟现实&#xff08;VR…

磁场强度单位和磁感应强度单位转换

磁学量常用单位换算 、磁场强度单位和磁感应强度单位转换。 磁场单位 Oe&#xff08;奥斯特&#xff09;,A/m,T&#xff08;特斯拉&#xff09;三种. 1T1000mT 1mT10Gs 1Gs79.6A/m 1T(特斯拉)10000Gs(高斯)1Wb/M2 1Gs(高斯)1Oe(奥斯特)

DAY1,Qt [ 手动实现登录框(信息调试类,按钮类,行编辑器类,标签类的使用)]

1.手动实现登录框&#xff1b; ---mychat.h---头文件 #ifndef MYCHAT_H #define MYCHAT_H#include <QWidget> #include <QDebug> //打印信息 #include <QIcon> //图标 #include <QPushButton> //按钮 #include <QLineEdit> //行编辑器类 #in…

Fiddler学习笔记

Fiddler简介 学习Fiddler的基础前置知识 请求行又包括请求方法&#xff0c;统一资源定位符、请求协议及版本号 统一资源定位符就是资源的绝对路径 请求体里写服务器需要的参数 304是服务器没有变化&#xff0c;根据请求头发现请求的内容和本地一样&#xff0c;就不再发回来了 …

day02_springboot综合案例

day02_springboot综合案例 订单操作 查询所有订单 查询所有订单流程 查询订单&#xff0c;要把订单对应的产品也要查出来 Orders实体类 Data public class Orders {private String id;private String orderNum;DateTimeFormat(pattern"yyyy-MM-dd HH:mm")privat…

【前端知识】React 基础巩固(三十三)——Redux的使用详解

React 基础巩固(三十三)——Redux的使用详解 Redux的使用详解 针对React 基础巩固&#xff08;三十二&#xff09;中的案例&#xff0c;我们希望抽取页面中共有的代码&#xff08;例如下方的代码&#xff09;&#xff0c;使用高阶组件统一拦截。 constructor() {super();this.…

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递&#xff0c;到达L1-2路由器时&#xff0c;L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递&#xff1b; 因此L2区域的设备可以学习到L1区域的明细路由&#xff0c;进行访问&#xff1b;…

离多态更近一步

在面向对象的语言里面,封装,继承,多态可谓是在熟悉不过了,当我们每次再去重新认识它们的时候总会有新的发现,为此我也经常感到疑惑,所以在这里和大家一起探讨三个问题,让我们在向多态靠近一点点。 虚表是否真的存在静态区 经常我们都会看见一个问题&#xff0c;虚表到底是存放…

Cisco学习笔记(CCNA)——Equipment Infrastructure Management

Equipment infrastructure management 路由器组件 路由器的组成及功能 CPU&#xff1a;执行操作系统的指令 随机访问存储器&#xff08;RAM内存&#xff09;&#xff1a;RAM中内容断电丢失 只读存储器&#xff08;ROM&#xff09;&#xff1a;开机自检软件&#xff0c;路由…

Jmeter 压测实战:Jmeter 二次开发之自定义函数

目录 1 前言 2 开发准备 3 自定义函数核心实现 3.1 新建项目 3.2 继承实现 AbstractFunction 类 3.3 最终项目结构 4 Jmeter 加载扩展包 4.1 maven 构建配置 4.2 项目打包 4.3 Jmeter 加载扩展包 5 自定义函数调用调试 5.1 打开 Jmeter 函数助手&#xff0c;选择自…