SpringCloud-Feign远程调用

news2025/1/23 11:57:39

🍁Feign的介绍

Feign是一个声明式的http客户端,官方地址: https://github.com/0penFeign/feign作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

🍁定义和使用Feign客户端

1.引入依赖

在order-service服务的pom文件中引入feign的依赖:

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

2.在order-service的启动类添加注解开启Feign的功能

@MapperScan("com.jkj.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

3.编写Feign的客户端

在order-service中新建一个UserClient接口

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:

服务名称:userservice

请求方式:GET

请求路径:/user/{id}

请求参数:Long id

返回值类型:User

4.测试

修改order-service中的OrderService类中的queryOrderById方法,使用Feign客户端代替RestTemplate

 @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.用Feign远程调用
        User user = userClient.findById(order.getUserId());
        //3.封装user到order
        order.setUser(user);
        // 4.返回
        return order;
    }

Feign的使用步骤
引入依赖

添加@EnableFeignClients注解

编写FeignClient接口

使用FeignClient中定义的方法代替RestTemplate

🍁自定义配置

Feign支持自定义配置,如下所示:

🔥配置文件方式

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

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

针对所有服务:

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

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

🔥代码方式

基于Java代码来修改日志级别,先声明一个类,然后声明一个Logger.Level的对象:

public class DefaultFeignConfiguration  {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC; // 日志级别为BASIC
    }
}

如果要全局生效,将其放到启动类的@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class) 

如果是局部生效,则把它放到对应的@FeignClient这个注解中:

@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class) 

🍁Feign使用优化

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

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

Apache HttpClient :支持连接池

OKHttp:支持连接池

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

1.引入依赖

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

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

2.配置连接池
在order-service的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。

Feign的优化:
1.日志级别尽量用basic
2.使用HttpClient或OKHttp代替URLConnection

  • 引入feign-httpClient依赖
  • 配置文件开启httpClient功能,设置连接池参数

 

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

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

相关文章

【PyTorch Geometric】工具包安装部署 过程记录(图模型学习 需要安装的工具包);图神经网络 工具包安装过程记录

目录 部署过程下载别的版本试试部署过程 在常规的安装过程中,若直接通过pip,老师讲 大概率无法成功安装。比较正规的安装方法是,下载好工具包,手动安装。 首先通过 Jupyter Notebook打开配置文档: 有些步骤在该文档中。 点击上图中的超链接,进入对应的 GitHub。 进去…

Linux进程间通信(一):匿名管道的原理和使用

文章目录一、前言二、什么是匿名管道&#xff1f;三、匿名管道的原理三、匿名管道的创建四、匿名管道实现数据传输五、匿名管道实现进程控制六、匿名管道特点总结一、前言 &#xff08;在阅读本文前&#xff0c;需要具备Linux基础IO的基本知识&#xff09;  在某些特定情况下…

【Linux】Linux下基本指令(二)

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Linux》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 1. Linux基本指令&#xff1a;&#xff08;续&#xff09; 1.1man指令&am…

英国访问学者AV签证超期怎么办?

英国AV签证只给12个月整&#xff0c;关于 AV签证超期怎么办&#xff1f;知识人网访问学者老师和大家聊一聊&#xff1a; 一、呆不满一年(360天)会遇到的问题主要有&#xff1a; 1、无法申请留学回国科研启动基金。 2、需要向CSC返还一定的资助费用。 3、国内一些地方判断一个…

数字化转型如何认清本质少被忽悠:小步快跑看到项目效果再推下一步

这些年&#xff0c;我们见识了太多新概念&#xff1a;数据智能、Data Fabric、数据虚拟化还有最著名的“数据中台”。 然而&#xff0c;跟几年前疯狂追逐这些热词不同&#xff0c;或者说因为已经踩坑踩到晕厥。动辄一个千万的中台项目投入进去&#xff0c;上线后高层看数还是要…

【网络安全】Redis未授权访问查看敏感文件

前言 什么是未授权访问漏洞呢&#xff1f;也就是没有权限&#xff0c;但是可以访问站点或者服务器的漏洞&#xff0c;称之为未授权访问漏洞&#xff0c;这个属于高危漏洞。比如我们常见的路由器未授权访问等等。 一、准备阶段 service httpd.service start 开启apache服务se…

【文档编辑】积累

文章目录WordExcel填充表格样式函数Markdownsublime搜索jsonhexWord Word 2016 撰写论文(1): 公式居中、编号右对齐 Excel 填充 EXCEL excel中运用ctrlD、ctrlenter、ctrlE批量填充数据 表格样式 Excel技法&#xff1a;三招实行Excel隔行填色 函数 COUNTA 函数 step1&…

最小生成树算法:Kruskal 与 Prim算法

Ⅰ. 最小生成树 连通图中的每一棵生成树&#xff0c;都是原图的一个极大无环子图&#xff0c;即&#xff1a;从其中删去任何一条边&#xff0c;生成树就不再连通&#xff1b;反之&#xff0c;在其中引入任何一条新边&#xff0c;都会形成一条回路。 若连通图由 n 个顶点组成&…

向前主动防御 | 云蜜罐年底感恩回馈活动

安全事件频发&#xff0c;防御能力备受考验2022年接近尾声&#xff0c;回顾全年&#xff0c;数据泄露、网络攻击、漏洞发现等各个层面呈爆发态势&#xff0c;无论在数量还是影响面上&#xff0c;均超过以往任何年度。信息泄露创历史新高&#xff0c;2022年仅上半年泄露或被盗的…

计算机组成原理——期末复习题

113、计算机系统如何进行多级划分&#xff1f;这种分级观点对计算机设计会产生什么影响&#xff1f;答案&#xff1a;计算机系统通常由五个以上不用的级组成&#xff0c;具体如下&#xff1a; 第1级是微程序设计级或逻辑电路级&#xff0c;该级由硬件直接执行&#xff1b; 第…

异步代码处理

在Spring中&#xff0c;实现异步调用主要有三种方式&#xff1a; 方式一&#xff1a;注解方式 要开启异步支持&#xff0c;首先得在Spring Boot入口类上加上EnableAsync注解&#xff1a; SpringBootApplication EnableAsync public class DemoApplication {public static voi…

算法leetcode|24. 两两交换链表中的节点(rust重拳出击)

文章目录24. 两两交换链表中的节点&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;rustgoccpythonjava24. 两两交换链表中的节点&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xf…

百倍加速IO读写!快使用Parquet和Feather格式!⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/409 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…

你碰到过这8种Spring事务失效的场景的那几种?

前言 作为Java开发工程师&#xff0c;相信大家对Spring种事务的使用并不陌生。但是你可能只是停留在基础的使用层面上&#xff0c;在遇到一些比较特殊的场景&#xff0c;事务可能没有生效&#xff0c;直接在生产上暴露了&#xff0c;这可能就会导致比较严重的生产事故。今天&a…

产业智能化创新标杆 2022年度“飞桨产业应用创新奖”颁布

随着AI进入工业大生产阶段&#xff0c;更多垂直行业正在与AI深度融合&#xff0c;更多创新实践不断涌现。日前&#xff0c;WAVE SUMMIT 2022深度学习开发者峰会在线上召开&#xff0c;百度发布了飞桨产业级深度学习平台和文心大模型的生态成果和最新进展&#xff0c;重磅颁发了…

MySQL高级【索引分类】

目录 1&#xff1a;索引分类 1.1&#xff1a;索引分类 1.2&#xff1a;聚集索引&二级索引 2&#xff1a;索引语法 1&#xff1a;索引分类 1.1&#xff1a;索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索…

(2022年12月最新)spring-core-rce漏洞复现CVE-2022-22965

1、漏洞简介 2022年3月29日&#xff0c;Spring框架曝出RCE 0day漏洞。已经证实由于 SerializationUtils#deserialize 基于 Java 的序列化机制&#xff0c;可导致远程代码执行 (RCE)&#xff0c;使用JDK9及以上版本皆有可能受到影响。 通过该漏洞可写入webshell以及命令执行。在…

数据结构C语言版 —— 二叉树的顺序存储堆的实现

二叉树顺序结构实现(堆) 1. 堆的概念 堆在物理上是一个一维数组&#xff0c;在逻辑上是一颗完全二叉树满足父亲节点小于等于孩子节点的叫做小堆或者小根堆满足父亲节点大于等于孩子节点的叫做大堆或者大根堆 堆的孩子和父亲的下标关系 已知父亲(parent)的下标 左孩子(left)下…

基于昇思MindSpore实现使用胶囊网络的图像描述生成算法

基于昇思MindSpore实现使用胶囊网络的图像描述生成算法 项目链接 https://github.com/Liu-Yuanqiu/acn_mindspore 01 项目描述 1.1 图像描述生成算法 人类可以轻易的使用语言来描述所看到的场景&#xff0c;但是计算机却很难做到&#xff0c;图像描述生成任务的目的就是教…

昇思MindSpore动静结合中list和dict方法实现

01 概述 静态图和动态图是神经学习框架中的重要概念&#xff0c;昇思MindSpore同时支持动态图和静态图两种模式&#xff0c;在动态图与静态图的结合方面做了很多工作。本文以昇思MindSpore框架中图模式下list和dict的实现方式为例&#xff0c;介绍昇思MindSpore框架中的动静结…