微服务中的Feign远程调用

Feign的个人理解

        Feign在英文中是“装”的意思,但在微服务中他是远程调用的一种方式,我的理解是:他替代了RestTemplate+Nacos中的URL编码的方式,显得很高大上,所以很装:(声明式事务,只需要在Spring中把需要发请求的信息声明出来,剩下的交给“Feign装”帮你搞定)

Feign的使用

        步骤很简单,首先我们需要引入依赖,然后再启动类上开启注解,编写Feign的客户端。部分代码对比:不难发现我们只需要少量的XXClient就可以替代大量的URL地址代码。

<!--Feign的依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

@Autowired
    private OrderMapper orderMapper;

    @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用UserClient发送请求
        User user = userClient.findById(order.getUserId());
        //3.封装user到order中去
        order.setUser(user);
        // 4.返回
        return order;
    }
    /*@Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用RestTemplate发送请求
        String url = "http://userservice/user/"+order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        //3.封装user到order中去
        order.setUser(user);
        // 4.返回
        return order;
    }*/

再Feign的内部集成了Ribbon,所以不需要担心负载均衡的问题

除此之外Feign还给我们提供了许多默认配置,包括我们可以自定义的一些常用配置:

feign.Logger.Level中NONE:没有日志信息(默认),BASIC:Http请求的开始时间结束时间和持续时间等基本信息,HEADDERS:除了记录请求的基本信息之外还给你记录下请求头和响应头信息,FULL:记录所有的信息

修改配置文件来达到修改日志级别的效果和使用Java代码来实现修改日志级别的效果

方式二:注释掉方式一的前提下我们先创建一个config类:

然后我们可以选择不同的作用范围:作用在@FeignClient注解里面表示配置在当前服务器生效

作用在启动类上的@EnableFeignClients上代表作用在全局

以上的记录日志会消耗一定的性能。

自然而然我们也会有相应的性能优化:

主要是通过连接池的配置来实现的

还是老样子,我们首先要引入依赖,然后再配置文件中配置连接池

<!--httpClient的依赖 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

配置文件:

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

Feign的最佳实践:

        第一种:继承(面向契约的思想,紧耦合)

        第二种:抽取(松耦合,但相对可能会引入不需要的依赖)

具体实现:

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

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

相关文章

端口扫描攻击检测及防御方案

端口扫描数据一旦落入坏人之手&#xff0c;可能会成为更大规模恶意活动的一部分。因此&#xff0c;了解如何检测和防御端口扫描攻击至关重要。 端口扫描用于确定网络上的端口是否开放以接收来自其他设备的数据包&#xff0c;这有助于网络安全团队加强防御。但恶意行为者也可以…

AI Prompt 提示词编写公式

自 OpenAI 的 ChatGPT 横空出世至今&#xff0c;各种 AI 大模型百花齐放、百家争鸣。按照用途可以分为两类&#xff1a; 对话类&#xff1a;即通过文字、语音、图片或者视频输入来给模型下达指令&#xff0c;然后模型按照指令以文字的形式将回答输出给用户&#xff1b;生成类&…

Web缓存代理和CDN 内容分发网络

目录 1.WEB缓存代理 1.1 WEB缓存代理作用 1.2 常见WEB缓存代理 1.3 Nginx 配置 缓存代理 2. CDN内容分发网络 1.WEB缓存代理 1.1 WEB缓存代理作用 存储一些之前给访问过的&#xff0c;且可能要被再次访问的静态网页资源对象&#xff0c;使客户端可以直接从缓存代理服务器…

钡铼BL104智慧环保多个485采集转MQTT无线传输

PLC物联网关BL104是一款专为工业环境设计的先进协议转换网关&#xff0c;其集成了钡铼智能技术和环保多个485采集转MQTT无线传输功能&#xff0c;为工业控制系统提供了高效的数据采集、传输和管理解决方案。 技术规格与功能特点 PLC物联网关BL104采用钡铼智能技术&#xff0c…

OpenCV学习之cv2.imshow()函数

OpenCV学习之cv2.imshow()函数 一、简介 cv2.imshow 是 OpenCV 库中用于显示图像的基本函数之一。在图像处理和计算机视觉的过程中&#xff0c;使用该函数可以快速预览处理后的图像&#xff0c;便于调试和结果展示。 二、基本语法 cv2.imshow(WindowName, Imgmat)三、参数说…

队列的相关知识

目录 创建 初始化 销毁 头插 尾删 取出头 取出尾 数字个数 判空 队列的性质与特征 性质&#xff1a;一种先进先出的线性表 特征&#xff1a;FIFO&#xff08;先进先出&#xff09; 实现&#xff1a;用数组和链表的都可以 例子&#xff1a;在生产者消费者模型用到了…

工单管理系统:开启企业降本增效的快车道-亿发

在现代企业的运营过程中&#xff0c;提升效率和降低成本是企业永恒的主题。传统的物流和售后管理方式往往依赖线下沟通&#xff0c;不仅效率低下&#xff0c;还存在流程无痕迹的问题&#xff0c;难以追溯责任&#xff0c;影响企业的整体运营效率。针对这些痛点&#xff0c;工单…

怎么把amr格式转换为mp3格式?这6个mp3格式转换方法不容错过!

怎么把amr格式转换为mp3格式&#xff1f;AMR&#xff08;自适应多速率&#xff09;是一种音频编码格式&#xff0c;通常用于存储基于语音的文件&#xff0c;例如语音记录和VoIP应用&#xff0c;在3G移动设备上使用。它具有非常高的压缩比&#xff0c;导致声音质量较差。早期的安…

【LLM 评估】GLUE benchmark:NLU 的多任务 benchmark

论文&#xff1a;GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding ⭐⭐⭐⭐ arXiv:1804.07461, ICLR 2019 Site: https://gluebenchmark.com/ 文章目录 一、论文速读二、GLUE 任务列表2.1 CoLA&#xff08;Corpus of Linguistic Accep…

pandas合并,拆分excel

目录 一:按照列进行拆分 二:将某几列的数据写入新excel 三:合并两个sheet数据到一个excel的一个sheet中 我们以商品销售明细为例,说明下excel的数据拆分和合并,我们的原始数据如下: 一:按照列进行拆分 现在我们需要统计下是否配送和支付方式为维度进行分组以后得数据…

【名企专访】|格行自有格行的骄傲,格行骄傲在哪?格行随身wifi火爆出圈的真实内幕!

最近刷视频在一个随身wifi的帖子下边看到&#xff0c;有个网友这样回复&#xff1a;“随身wifi行业真的该整治了&#xff0c;到处是跑路的&#xff0c;夸大宣传的&#xff0c;本来在线上买就是图个方便&#xff0c;现在搞得不敢买。本来利民的产品&#xff0c;被搞得乌烟瘴气&a…

【推荐】Prometheus+Grafana企业级监控预警实战

新鲜出炉&#xff01;&#xff01;&#xff01;PrometheusGrafanaAlertmanager springboot 企业级监控预警实战课程&#xff0c;从0到1快速搭建企业监控预警平台&#xff0c;实现接口调用量统计&#xff0c;接口请求耗时统计…… 详情请戳 https://edu.csdn.net/course/detai…

Clonable接口和拷贝

Hello~小伙伴们&#xff01;本篇学习Clonable接口与深拷贝&#xff0c;一起往下看吧~(画图水平有限&#xff0c;两张图&#xff0c;&#xff0c;我真的画了巨久&#xff0c;求路过的朋友来个3连~阿阿阿~~~) 目录 1、Clonable接口概念 2、拷贝 2、1浅拷贝 2、2深拷贝 1、Clon…

生命在于学习——Python人工智能原理(2.3.3)

三、Python的数据类型 3.2 Python的组合数据类型 特点&#xff1a;表示多个元素的组合&#xff0c;可以包含不同类型的元素&#xff0c;甚至是其他的组合数据类型。 在内存中通常需要额外的空间来存储元素间的关系。 组合数据类型能够将多个同类型或不同类型的数据组织起来&a…

MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载

MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片&#xff0c;简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程&#xff0c;也就是MAS0902量产过程&#xff1a; 注意&#xff1a;开卡转接线必须要用ASM1153E或JMS578主控…

Linux部署Java项目至云服务器

文章目录 1.服务器环境2.发布部署过程2.1 执行SQL脚本2.2 修改代码中数据源的配置2.3 修改配置中的日志级别与日志文件路径2.4 打包Java程序2.5 上传到服务器2.6 后台运行2.7 服务器开放对应的端口2.8 访问验证 1.服务器环境 要将我们的项目部署到云服务器上我们就需要先有一个…

独一无二的设计模式——单例模式(python实现)

1. 引言 大家好&#xff0c;今天我们来聊聊设计模式中的“独一无二”——单例模式。想象一下&#xff0c;我们在开发一个复杂的软件系统&#xff0c;需要一个全局唯一的配置管理器&#xff0c;或者一个统一的日志记录器&#xff1b;如果每次使用这些功能都要创建新的实例&…

SpringCloud中复制模块然后粘贴,文件图标缺少蓝色方块

再maven中点击&#xff0b;号&#xff0c;把当前pom文件交给maven管理即可

【UE 网络】RPC远程过程调用 入门篇

目录 0 引言1 RPC基本概念1.1 定义1.2 分类 2 RPC的使用2.1 Client RPC2.2 Server RPC2.3 Multicast RPC &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 网络】RPC远程过程调用 入门篇❣️ 寄语…

汇聚荣拼多多运营好吗?

在当前电商行业竞争激烈的背景下&#xff0c;拼多多凭借其独特的商业模式和市场定位迅速崛起&#xff0c;成为众多商家和品牌争相入驻的平台。对于“汇聚荣拼多多运营好吗?”这一问题&#xff0c;答案是肯定的。拼多多不仅提供了一个广阔的市场空间&#xff0c;还通过其创新的…