微服务入门篇:http客户端Feign(远程调用,自定义配置,Feign的性能优化,Feign服务抽取)

目录

  • 1.基于Feign的远程调用
    • 1.RestTemplate方式调用存在的问题
    • 2.Feign的介绍
    • 3.定义和使用Feign客户端
  • 2.自定义配置
    • 1.方式一:配置文件方式
    • 2.方式二: java代码方式,需要先声明一个Bean:
  • 3.Feign的性能优化
    • 1.Feign底层的客户端实现
    • 2.连接池配置
  • 4.Feign的最佳实践
    • 1.方式一(继承)︰
    • 2.方式二(抽取)∶

1.基于Feign的远程调用

1.RestTemplate方式调用存在的问题

①代码可读性差,编程体验不统一
②参数复杂URL难以维护

2.Feign的介绍

Feign是一个声明式的http客户端,官方地址:

 https://github.com/OpenFeign/feign

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

3.定义和使用Feign客户端

1.引入依赖:
在这里插入图片描述

2.在order-service的启动类添加注解开启Feign的功能:
在这里插入图片描述

3.编写Feign客户端:

在这里插入图片描述
修改service层中的服务层代码
使用FeignClient中定义的方法代替RestTemplate:
在这里插入图片描述
修改orderservice的yaml:
在这里插入图片描述
启动服务,发现服务:
在这里插入图片描述

访问order接口,实现Feign的远程调用和负载均衡。
查看源码发现:Feign已经集成了ribbon

2.自定义配置

Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:

在这里插入图片描述

一般我们需要配置的就是日志级别。

配置Feign日志:

1.方式一:配置文件方式

1.全局生效:
在这里插入图片描述

2.局部生效:

2.方式二: java代码方式,需要先声明一个Bean:

在这里插入图片描述

1.而后如果是全局配置,则把它放到@EnableFeignClients这个注解中:
在这里插入图片描述

2.如果是局部配置,则把它放到@FeignClient这个注解中:

在这里插入图片描述

3.Feign的性能优化

1.Feign底层的客户端实现

URLConnection:默认实现,不支持连接池.
Apache HttpClient :支持连接池
OKHttp:支持连接池

因此优化Feign的性能主要包括:
①使用连接池代替默认的URLConnection
②日志级别,最好用basicnone

2.连接池配置

1.Feign添加HttpClient的支持:
引入依赖:
在这里插入图片描述

2.配置连接池:

在这里插入图片描述

4.Feign的最佳实践

1.方式一(继承)︰

给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。

2.方式二(抽取)∶

FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用

实现步骤如下:
1.首先创建一个module,命名为feign-api,然后引入feign的starter依赖

在这里插入图片描述
在这里插入图片描述

2.将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
在这里插入图片描述

3.在order-service中引入feign-api的依赖
在这里插入图片描述
4.修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
5.重启测试

在这里插入图片描述

当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用
有两种方式解决:

1.方式一:指定FeignClient所在包
在这里插入图片描述

1.方式二:指定FeignClient字节码
在这里插入图片描述

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

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

相关文章

EMNLP 2023精选:Text-to-SQL任务的前沿进展(下篇)——Findings论文解读

导语 本文记录了今年的自然语言处理国际顶级会议EMNLP 2023中接收的所有与Text-to-SQL相关(通过搜索标题关键词查找得到,可能不全)的论文,共计12篇,包含5篇正会论文和7篇Findings论文,以下是对这些论文的略…

c语言中的隐式类型转换

数据类型转化 我们在实际编程中,不管你是有意的还是无意的,有时候都会让两个不同类型的数据参与运算,编译器为了能够生成CPU可以正常 执行的指令,往往会对数据做类型转换,将两个不同类型的数据转换成同一种数据类型。…

Springboot+vue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的社区养老服务平台,采用M(model&…

最佳视频转换器软件:2024年视频格式转换的选择

我们生活在一个充满数字视频的世界,但提供的内容远不止您最喜欢的流媒体服务目录。虽然我们深受喜爱的设备在播放各种自制和下载的视频文件方面变得越来越好,但在很多情况下您都需要从一种格式转换为另一种格式。 经过大量测试, 我们尝试过…

Go 中如何解析 json 内部结构不确定的情况

本文主要介绍的是关于 Go 如何解析 json 内部结构不确定的情况。 首先,我们直接看一个来提问吧。 问题如下: 上游传递不确定的json,如何透传给下游业务?比如,我解析参数 {"test": 1,"key": {&…

2024年信息管理与工业制造与自动化国际学术会议(ICIMIMA2024)

2024年信息管理与工业制造与自动化国际学术会议(ICIMIMA2024) 会议简介 2024年信息管理与工业制造及自动化国际学术会议(ICIMIMA2024)将在中国三亚举行。会议旨在为信息管理和工业工程领域的专家、学者、工程师和技术人员提供一个平台,分享…

深入Java容器:概览、设计模式与源码分析

深入Java容器:概览、设计模式与源码分析 Java 容器一、概览Collection1. Set2. List3. Queue Map 二、容器中的设计模式迭代器模式适配器模式 三、源码分析ArrayList1. 概览2. 扩容3. 删除元素4. 序列化5. Fail-Fast Vector1. 同步2. 扩容3. 与 ArrayList 的比较4. …

人工智能算法:理解其工作原理及其在现实世界中的应用

随着科技的飞速发展,人工智能(AI)已逐渐成为我们生活中不可或缺的一部分。从智能语音助手到自动驾驶汽车,再到医疗诊断系统,人工智能算法正以前所未有的速度改变着我们的世界。本文将带您深入探讨人工智能算法的工作原…

【leetcode热题100】分隔链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head [1,4,3,2,5,2], x 3 输出&am…

【开源】JAVA+Vue+SpringBoot实现班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

2024年【氧化工艺】新版试题及氧化工艺操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 氧化工艺新版试题是安全生产模拟考试一点通生成的,氧化工艺证模拟考试题库是根据氧化工艺最新版教材汇编出氧化工艺仿真模拟考试。2024年【氧化工艺】新版试题及氧化工艺操作证考试 1、【单选题】 对现场窨…

【GO语言卵细胞级别教程】04.GO函数介绍

【GO语言卵细胞级别教程】04.GO函数介绍 目录: 【GO语言卵细胞级别教程】04.GO函数介绍0.创建项目1.函数的引入2.注意事项3.详细介绍3.1 形参介绍 0.创建项目 创建目录 执行命令加载模块 cd 02.gostudy目录下 1.进入目录下 cd 02.gostudy 2.初始化模块变量 go …

多线程JUC:线程池原理、自定义线程池详细解析

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:多线程&JUC:等待唤醒机制(生产者消费者模式) 📚订阅专栏:多线程&…

「优选算法刷题」:数青蛙

一、题目 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不…

Minecraft的红石教程之隐形门一号

一.前言 昨天写的,哦不,今天凌晨写的CSDN太烧脑了,今天玩会儿MinecraftA-A 二.一号隐形门 1.准备的材料: 粘性活塞,木板,红石,压力板,红石火把 2.挖洞 中间挖2*3*2的洞&#xf…

第三百一十七回

文章目录 1. 概念介绍2. 实现方法2.1 hintText2.2 labelText2.3 controller 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何在输入框中处理光标"相关的内容,本章回中将介绍如何添加输入框默认值.闲话休提,让我们一起Talk Flutter吧。 1.…

基于springboot广场舞团管理系统源码和论文

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

Java项目:19 基于SpringBoot的医院管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 医院管理系统 分为三个角色 管理员、医生、病人 管理员的主要功能:系统管理、医生管理、患者管理、预约管理、病史管理、住院信息管理、管…

【OrangePi Zero2 智能家居】阿里云人脸识别方案

一、接入阿里云 二、C语言调用阿里云人脸识别接口 三、System V消息队列和POSIX 消息队列 一、接入阿里云 在之前树莓派的人脸识别方案采用了翔云平台的方案去1V1上传比对两张人脸比对,这种方案是可行,可 以继续采用。但为了接触更多了云平台方案&…

Flink基础篇|001_Flink是什么

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者 🔥 三连支持:欢迎 ❤️关注、&#x…