当前位置: 首页 > news >正文

SpringCloudFeign远程调用

文章目录

  • 1. Feign 是什么
  • 2. Feign 的使用
    • 2.1 引入依赖
    • 2.2 写接口
    • 2.3 服务调用方
    • 2.4 启动测试
  • 3. Feign 日志配置
  • 4. Feign 使用优化
  • 5. 注意包扫描问题


在这里插入图片描述

1. Feign 是什么

Feign 是一个声明式、模板化的 HTTP 客户端,它是由 Netflix 开发并开源的。Feign 极大地简化了基于 HTTP 的服务间通信的开发过程,并与 Spring Cloud 进行了深度集成。

以下是 Feign 的一些特点和优势:

  • 声明式 API 定义:Feign 使用接口的方式定义服务调用的 API,使得声明和使用 API 更加直观和简洁。你只需要定义接口,并使用注解来描述 API 的细节,如请求方法、请求路径、请求参数等信息。

  • 整合了负载均衡:在 Spring Cloud 环境下,Feign 可以与 Ribbon 负载均衡进行集成。它可以自动将请求分发到后端的多个服务实例中,以实现负载均衡和服务发现。

  • 集成了 Hystrix 断路器:Feign 直接集成了 Hystrix 断路器,可以提供服务降级和容错能力。当服务调用失败或延迟过高时,Feign 可以快速启动断路器,避免雪崩效应。

  • 支持多种编码器和解码器:Feign 支持多种数据格式的编码和解码,例如 JSON、XML 等。你可以通过配置和注解来指定请求和响应的编码方式。

  • 支持自定义拦截器:Feign 提供了拦截器的扩展机制,你可以在请求发出前或响应返回后对请求进行处理。这些拦截器可以用于日志记录、认证授权、请求重试等逻辑。

Feign 提供了一种简单、高效的方式来定义和使用 HTTP 客户端。它基于接口和注解,使得服务之间的调用更加直观和易于维护。同时,Feign 还集成了负载均衡和断路器等功能,可以帮助开发者构建高可用和可靠的微服务架构。


微服务之间的远程调用可以用 RestTemplate 来发起远程调用. 但是存在下面的几个问题:

•代码可读性差,编程体验不统一

•参数复杂URL难以维护

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


2. Feign 的使用

在实际的项目开发中我们会把各个微服务提供的供其他服务远程调用的接口 封装在一个单独的服务里.

在这里插入图片描述

2.1 引入依赖

在 API 服务;里引入依赖

 <!--feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

2.2 写接口

参照 服务提供的接口 写 API 中的接口
在这里插入图片描述

@FeignClient("user-server")
public interface UserApi {@GetMapping("user/{userId}")String hello(@PathVariable("userId") Integer userId);}

user-server 是微服务的服务名


2.3 服务调用方

服务调用方要做如下改动:

  1. 引入依赖

     <dependency><groupId>com.snow</groupId><artifactId>api</artifactId><version>1.0-SNAPSHOT</version></dependency>
    
  2. 启动类加配置
    启动类上加一行配置

    @EnableFeignClients(basePackages = {"com.snow.api"})
    

    com.snow.api 表示 API 的包

  3. 实际调用
    在这里插入图片描述


2.4 启动测试

略…


3. Feign 日志配置

基于配置文件修改feign的日志级别可以针对单个服务:

feign:  client:config: user-server: # 针对某个微服务的配置loggerLevel: FULL #  日志级别 

也可以针对所有服务:

feign:  client:config: default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置loggerLevel: FULL #  日志级别 

而日志的级别分为四种:

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

4. Feign 使用优化

Feign 底层发起 http 请求,依赖于其它的框架。其底层客户端实现包括:

• URLConnection:默认实现,不支持连接池

• Apache HttpClient :支持连接池

• OKHttp:支持连接池

因此提高 Feign 的性能主要手段就是使用 连接池 代替默认的 URLConnection。

这里我们用 Apache 的 HttpClient 来演示。

1)引入依赖

在 order-server 的 pom 文件中引入 Apache 的 HttpClient 依赖:

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

2)配置连接池

在 order-server 的 application.yml 中添加配置:

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

接下来,在 FeignClientFactoryBean 中的 loadBalance 方法中打断点:

在这里插入图片描述

Debug方式启动order-service服务,可以看到这里的client,底层就是Apache HttpClient:

在这里插入图片描述


5. 注意包扫描问题

服务调用方的启动类上.

方式一:

指定 Feign 应该扫描的包:

@EnableFeignClients(basePackages = "com.snow.api")

方式二:

指定需要加载的 Client 接口:

@EnableFeignClients(clients = {UserApi.class})

在这里插入图片描述



相关文章:

SpringCloudFeign远程调用

文章目录 1. Feign 是什么2. Feign 的使用2.1 引入依赖2.2 写接口2.3 服务调用方2.4 启动测试 3. Feign 日志配置4. Feign 使用优化5. 注意包扫描问题 1. Feign 是什么 Feign 是一个声明式、模板化的 HTTP 客户端&#xff0c;它是由 Netflix 开发并开源的。Feign 极大地简化了…...

Java中List、Set、Map三种集合之间的区别

Java中List、Set、Map三种集合之间的区别 1. List2. Set3. Map 在Java中&#xff0c;List、Set和Map是三种常见的集合类型&#xff0c;它们之间也有一些重要的区别&#xff1a; 1. List List是有序集合&#xff0c;可以存储重复元素。List的实现类常见有ArrayList、LinkedLis…...

SpringMVC之DispatcherServlet组件

目录 一、SpringMVC的核心处理流程二、DispatcherServlet1、init()方法2、doDispatch()方法3、AbstractAnnotationConfigDispatcherServletInitializer类 一、SpringMVC的核心处理流程 请求到达 DispatcherServlet DispatcherServlet 的请求处理&#xff1a; DispatcherServlet…...

抢商家、夺用户、比低价,抖音、快手、小红书“奇招尽出”

随着流量红利逐渐消退&#xff0c;国内电商平台之间互相内卷已成为了行业常态&#xff0c;而无论是在该领域深耕已久的淘宝、京东、拼多多等电商巨头&#xff0c;还是新跨界而来的抖音、快手、小红书等电商新秀都在不断地进行创新&#xff0c;以便为商家提供更好的服务&#xf…...

ChatGPT引领的AI面试攻略系列:AI全栈工程师篇

系列文章目录 AI全栈工程师&#xff08;本文&#xff09; 文章目录 系列文章目录一、前言二、面试题1. 基础理论与数据处理2. 机器学习3. 深度学习4. 大模型与迁移学习5. 计算机视觉6. 自然语言处理&#xff08;NLP&#xff09;7. 多模态学习8. AI生成内容&#xff08;AIGC&am…...

上位机图像处理和嵌入式模块部署(qmacvisual配置)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到了qmacvisual的编译、验证码、用户登录以及流程的编辑&#xff0c;这部分都是基础工作。事实上&#xff0c;除了这些内容之外&#xf…...

EXPLAIN PLAN FOR:在Oracle中生成执行计划

目录 案例 解析 Operation类型 在Oracle中&#xff0c;可以使用 EXPLAIN PLAN FOR 命令来生成执行计划&#xff0c;然后通过 SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY(PLAN_TABLE))来查看执行计划。需要注意的是&#xff0c;这两个命令需要在同一个窗口下运…...

蓝桥杯 9241.飞机降落

这道题本来作者以为是可以用一些小技巧进行暴力解法的&#xff0c;但是后来试了一下&#xff0c;不能过去全部数据。 下面是对半个的题解&#xff1a; #include<iostream> #include<stdio.h> #include<cstring> #include<cstdlib> #include<cmath…...

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…...

深度学习-Pytorch实现经典AlexNet网络:山高我为峰

深度学习-Pytorch实现经典AlexNet网络之山高我为峰 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰…...

25考研习题记录

3月 汤家凤《1800》 基础篇 日期高等数学线性代数概率论3.1 P92-93 P212-214 3.4 P10-15 P10-19 极限题62题 P73-74 P170-172 行列式17题 考研竞赛凯哥每日一题 张宇高数30讲页数3.4P74...

上海计算机学会 2023年12月月赛 丙组T4 迷宫(宽度优先搜索)

第四题&#xff1a;T4迷宫 标签&#xff1a;宽度优先搜索题意&#xff1a;给定 n n nx m m m由 # \# #&#xff08;墙&#xff09;、 . . .&#xff08;空地&#xff09;组成的地图&#xff0c;求从左上角到右下角的最少步数&#xff0c;每次只允许上下左右移动一格&#xff0…...

【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建

&#x1f308;欢迎来到C项目专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mysq…...

站群服务器需要多大内存

站群服务器的内存需求取决于网站的数量和流量&#xff0c;以及服务器需要运行的应用和服务。RAKsmart小编为您整理发布站群服务器需要多大内存以及站群服务器内存需求的考虑因素。 站群服务器是一种用于托管多个网站的服务器&#xff0c;通常用于搜索引擎优化(SEO)和网络内容管…...

HTB Perfection

Perfection User Namp ┌──(kali㉿kali)-[~/HTB/machine/Perfection] └─$ nmap -A 10.129.226.58 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-03 21:10 EST Nmap scan report for 10....

如何远程连接MySQL数据库?

在现代互联网时代&#xff0c;远程连接MySQL数据库成为了许多开发者和管理员必备的技能。这不仅方便了数据的共享和管理&#xff0c;还可以使多个团队在全球范围内协同工作。本文将介绍如何通过天联组网实现远程连接MySQL数据库&#xff0c;并实现高效的信息远程通信。 天联组网…...

【 HTML 及浏览器 】前端跨页面通信

前端跨页面通信&#xff1a;连接分散界面的纽带 在构建复杂的前端应用时&#xff0c;我们常常需要在不同的页面之间进行数据通信。无论是同源页面还是非同源页面&#xff0c;通信机制都是实现多页面数据同步和交互的关键。本文将探讨各种前端跨页面通信的方法&#xff0c;并提…...

内存安全的编程语言

美国政府新颁布《回归基础构件&#xff1a;通往安全软件之路》 《回归基础构件&#xff1a;通往安全软件之路》中&#xff0c;白宫国家网络主任办公室&#xff08;ONCD&#xff09;呼吁开发者使用「内存安全的编程语言」 内存安全的编程语言 根据NSA的建议&#xff0c;内存…...

Excel常用公式总结非常实用

16个最实用的Excel万能公式 1、多条件判断 IF(And(条件1,条件2..条件N),条件成立返回值) IF(or(条件1,条件2..条件N),条件成立返回值) 2、多条件查找 Lookup(1,0/((条件1*条件2*...条件N)),返回值区域&#xff09; 3、多条件求和 Sumifs(值区域,判断区域1,条件1,判断区域2,条…...

window路径特殊字符解决

官方定义命名规范 https://learn.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file 重点 1.目录规范 特殊字符以空格 与点.开头结尾 2.文件规范 特殊字符以空格 与点.开头结尾NUL、COM等文件 解决方案 字符标点符号实际上在字符集定义中有一个很有趣的现象&…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...