OpenFeign的使用(一)

news2024/9/21 20:04:08

OpenFeign的定义

        OpenFeign是一个声明式的Web服务客户端,它简化了编写Web服务客户端的过程,使得微服务间的通信更加简单和灵活。它主要作用于帮助开发者方便地调用远程服务,让远程调用像本地方法调用一样简单

事实上,远程调用的关键点就在于四个:

  • 请求方式

  • 请求路径

  • 请求参数

  • 返回值类型

        所以,OpenFeign就利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理帮我们生成远程调用的代码,而无需我们手动再编写,非常方便。

1.OpenFeign快速入门

1.1.引入依赖

在服务的pom.xml中引入OpenFeign的依赖和loadBalancer依赖:

  <!--openFeign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--负载均衡器-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

1.2.启用OpenFeign

在Spring Boot的启动类上添加@EnableFeignClients注解来启用OpenFeign。

1.3.编写OpenFeign客户端

使用@FeignClient注解定义一个Feign客户端接口,并在该接口中定义需要调用的远程服务方法。

例如:

package com.hmall.cart.client;

import com.hmall.cart.domain.dto.ItemDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@FeignClient("item-service")
public interface ItemClient {

    @GetMapping("/items")
    List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
}

这里只需要声明接口,无需实现方法。接口中的几个关键信息:

  • @FeignClient("item-service") :声明服务名称

  • @GetMapping :声明请求方式

  • @GetMapping("/items") :声明请求路径

  • @RequestParam("ids") Collection<Long> ids :声明请求参数

  • List<ItemDTO> :返回值类型

        有了上述信息,OpenFeign就可以利用动态代理帮我们实现这个方法,并且向http://item-service/items发送一个GET请求,携带ids为请求参数,并自动将返回值处理为List<ItemDTO>。我们只需要直接调用这个方法,即可实现远程调用了。

1.4.使用FeignClient

在需要调用远程服务的地方,直接注入上一步定义的Feign客户端接口,并调用其方法即可。

        例如,我们在cart-servicecom.hmall.cart.service.impl.CartServiceImpl中改造代码,直接调用ItemClient的方法:

        Feign替我们完成了服务拉取、负载均衡、发送http请求的所有工作,而且,这里我们不再需要RestTemplate了,还省去了RestTemplate的注册。

2.连接池

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

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

  • Apache HttpClient :支持连接池

  • OKHttp:支持连接池

因此我们通常会使用带有连接池的客户端来代替默认的HttpURLConnection。比如,我们使用OK Http.

2.1.引入依赖

<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

2.2.开启连接池

application.yml配置文件中开启Feign的连接池功能:

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

重启服务,连接池就生效了。

2.3.验证

我们可以打断点验证连接池是否生效。

Debug方式启动cart-service,请求一次查询我的购物车方法,进入断点:

可以发现这里底层的实现已经改为OkHttpClient。

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

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

相关文章

共享单车轨迹数据分析:以厦门市共享单车数据为例(一)

共享单车数据作为交通大数据的一个重要组成部分&#xff0c;在现代城市交通管理和规划中发挥着越来越重要的作用。通过对共享单车的数据进行深入分析&#xff0c;城市管理者和规划者能够获得大量有价值的洞察&#xff0c;这些洞察不仅有助于了解城市居民的日常出行模式&#xf…

入职国企3个月,还没碰过代码,很焦虑。。

国企 日常逛脉脉&#xff0c;看到名为「入职后发现提升很慢怎么办」的话题。 本以为是正儿八经的讨论帖&#xff0c;结果点开&#xff0c;还是有凡尔赛&#xff0c;不愧是人均 P8 交流地 &#x1f923;&#x1f923; 一位网友表示&#xff1a;自己入职了国企三个月&#xff0c;…

spring cloud gateway配置

1:Intellij 新建项目 spring-cloud-gateway 2:pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…

正规式与有限自动机例题

答案&#xff1a;D 知识点&#xff1a; 正规式 正规集 举例 ab 字符串ab构成的集合 {ab} a|b 字符串a,b构成的集合 {a,b} a^* 由0或者多个a构成的字符串集合 {空,a,aa,aaa,aaaa} (a|b)^* 所有字符a和b构成的串的集合 {空,a,b,ab,aab,aba,aaab} a(a|b)^* 以a为…

145-Linux权限维持Rootkit后门Strace监控Alias别名Cron定时任务

参考 【权限维持】Linux&Rootkit后门&Strace监控&Alias别名&Cron定时任务_alias lsalerts(){ ls $* --colorauto;python -c "-CSDN博客 参考 FlowUs 息流 - 新一代生产力工具 权限维持-Linux-定时任务-Cron后门 利用系统的定时任务功能进行反弹Shell 1…

电脑WLan无线网连上没网络的问题解决方法

在公司的酒店&#xff0c;网络很差&#xff0c;每到周末网就很差&#xff0c;昨天网上还能上头条写文章&#xff0c;终于&#xff0c;今天浏览器都上不去了&#xff0c;咋回事呢&#xff1f; 明明手机能上网呀&#xff0c;明明电脑显示无线网已连接&#xff0c;没一点问题呀&a…

【语音告警】博灵智能语音报警灯JavaScript循环播报场景实例-语音报警灯|声光报警器|网络信号灯

功能说明 本文将以JavaScript代码为实例&#xff0c;讲解如何通过JavaScript代码调用博灵语音通知终端 A4实现声光语音告警。主要博灵语音通知终端如何实现无线循环播报或者周期播报的功能。 本代码实现HTTP接口的声光语音播报&#xff0c;并指定循环次数、播报内容。由于通知…

『功能项目』战士的A键连击【33】

我们打开上一篇32更换URP场景的项目&#xff0c; 本章要做的事情是切换为战士的连击动画&#xff0c;主要实现的是做了一个战士的动画行为&#xff0c;当按键盘A的时候播放一次右手攻击动画&#xff0c;在1秒内再次按A键播放左手攻击动画&#xff0c;再在1秒内按A键播放右手攻击…

Mysql 数据库免费使用

目录 前言 详细步骤 总结 前言 由于工作需要现在打算学习WPF开发&#xff0c;因为需要访问mysql数据&#xff0c;但是又不想在自己电脑上安装。于是就上网试着查了下&#xff0c;发现果然有提供免费数据库服务的网站。nice&#xff01;所以就打算写一篇文章详细记录一下&…

上海网站设计-网站手机端制作

随着移动互联网的迅猛发展&#xff0c;越来越多的人通过手机上网&#xff0c;这使得网站手机端的设计和制作变得尤为重要。在这种背景下&#xff0c;上海的网站设计行业迎来了新的机遇与挑战。 首先&#xff0c;网站手机端制作的必要性不容忽视。根据统计数据显示&#xff0c;手…

从零开始构建大语言模型并进行微调:全面指南

要从0开始搭建并训练一个大语言模型&#xff08;LLM&#xff09;&#xff0c;涉及到多个步骤和资源&#xff0c;包括理论理解、工具使用、数据准备、模型训练与微调。以下是一个从基础到应用的指南&#xff0c;帮助你理解并逐步实现这一目标。 1. 理解基础概念 在开始搭建大语…

Python的math库——常用数学函数全解析

文末赠免费精品编程资料~~ 一、math模块简介 math 是 Python 内置的一个标准库&#xff0c;它包含了许多执行复杂数学运算的函数&#xff0c;如三角函数、对数函数、指数函数等。 二、常用函数详解与示例 基本数学运算 math.sqrt(x): 计算平方根。 import math# 计算平方根…

Day-07-QT中如何引入图片替换控件

一、引入步骤 在引用之前可以在自己项目保存的地址下面创建一个文件夹&#xff0c;专门用来保存图片 1、添加一个资源文件 2、选择文件类型 3、 点击AddFile添加要用的图片 4、添加完后CtrlS保存 5、选择要替换的控件&#xff0c;改变样式表 6、选择border-image 7、选中图…

SQL治理经验谈:索引覆盖

背景 explain - format id: query sql 的标识idSELECT_TYPE: 查询的类型&#xff08;SIMPLE/PRIMARY/SUBQUERY/DERIVED/UNION/UNION RESULT/DEPENDENT SUBQUERY/DEPENDENT UNION&#xff09;table: 表名Partitions: 表连接的分区数type: 查询中使用的访问类型&#xff08;syste…

电脑主机内存

在计算机的组成结构当中内存是非常重要的一部分&#xff0c;它用来存储程序和数据。对于计算机来说有了内存才能保证计算机的正常工作。 内部存储器就是我们所说的内存条&#xff0c;一般是用来即时存储数据。不做数据的长期保留。 外部存储器就是我们常说的固态或者硬盘。固态…

电脑点击关机之后,又自动重启开机了。根本就关不了?

前言 有个小姐姐说&#xff0c;她家的电脑好生奇怪&#xff1a;点击【关机】按钮之后&#xff0c;电脑提示【正在关机】&#xff0c;过了几秒&#xff0c;电脑又自动开机了…… 好家伙&#xff01;也就是说关机和重启根本就没区别&#xff0c;电脑完全无法断电。 最后忍无可…

C++list类介绍和常用接口说明(超全超详细)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Clist类介绍和常用接口说明(超全超详细) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录…

推荐一款强大的OCR软件,请低调使用!

今天给大家分享一款开源的OCR识别软件&#xff0c;可以提升大家的办公效率——Umi-OCR&#xff0c;支持window​和Linux系统。 Umi-OCR支持提取一张图片或者多张图片的信息&#xff0c;只需通过右边的功能页选择相应的功能。 点击左边的“截图OCR”进入页面 点击“截图”按钮选…

SpringBoot自定义starter(starter的命名规范、starter的结构、自定义starter、为配置属性添加描述信息、检验配置属性)

文章目录 0. 前言1. 前置知识1.1 starter的命名规范1.2 分析 Mybatis 的场景启动器1.3 starter的结构分析 2. 创建自定义的场景启动器2.1 创建父工程2.2 初始化父工程2.3 创建 autoconfigure 模块2.4 创建 starter 模块2.5 在 starter 模块中引入 autoconfigure 模块的依赖2.6 …

算法学习:滑动窗口

题目 滑动窗口 滑动窗口的题目在解决统计连续带特殊要求的元素串问题时作用巨大。逃离仅仅只是套路学习的黑洞&#xff0c;我认为这种方法在无序的统计中&#xff0c;找到了有序的切入点。初看题目时&#xff0c;可以想到的统计方法有很多&#xff0c;但实现在计算机上则必须有…