OpenFeign --学习笔记

什么是OpenFeign?

OpenFeign可以想象成一座连接客户端(服务器)和服务器之间的桥梁。在微服务架构中,各个服务之间像小岛屿一样分布在网络上,它们需要相互通信才能协同工作。但是,这些岛屿之间并没有现成的桥梁,这就需要一种工具来建立联系。

当把项目拆成微服务时,服务之间需要互相调用的时候就很不方便,每个服务都拆成了一个独立的个体,这个时候再想去调用其它服务的话就可以用到OpenFeign,采用在线请求的方式,通过网络而不是再通过本地去调用其它服务。

OpenFeign就像是一个建桥专家。你只需要给它提供一张图纸(即定义一个接口),告诉它两边的岛屿需要什么样的路(即你需要调用的远程服务的方法)。OpenFeign就会自动构建一座桥(实现服务之间的通信)。

当客户端想要调用远程服务的某个功能时,通过这座桥就可以直接发送请求,不再需要亲自游过河(不需要使用复杂的HTTP客户端操作)。简单来说,就好比你给OpenFeign一个购物清单,它会到对面的商店去帮你买东西并带回来。

OpenFeign中的每一次HTTP请求都归结为简单的Java方法调用,让开发者感觉就像是在用本地方法一样,而不必担心服务之间的网络通信细节。换句话说,就是让微服务之间的对话变得简单易懂,像邻里之间的搭话一样自然亲切。

OpenFeign的使用

1、引入依赖

复制代码
  //先在父类中引入springcloud的依赖
  <!--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>

2、添加注解

在启动类上添加注解,启动OpenFeign功能:

复制代码
@EnableFeignClients(basePackages = "com.hmall.api.client",defaultConfiguration = DefaultFeignConfig.class) //其中第一个规定了client接口的扫描包,第二个是openfeign的配置类
@MapperScan("com.hmall.cart.mapper")
@SpringBootApplication
public class CartApplication {
    public static void main(String[] args) {
       ...
    }
}

3、声明并编写Feign Client接口:

示例:

复制代码
@FeignClient("cart-service")    //要调用服务的名称,利用nacos得到目标服务地址并访问
public interface CartClient {

    @DeleteMapping("/carts")    //接口具体编写可以使用mvc的注解
    void deleteCartItemByIds(@RequestParam("ids") Collection<Long> ids);
}
  • @FeignClient("cart-service") :声明服务名称

  • @DeleteMapping("/items") :声明请求路径和请求方式

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

  • void :返回值类型

4、使用FeignClient

直接注入接口使用就可以了

相关推荐
艾莉丝努力练剑14 分钟前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
武昌库里写JAVA1 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Cx330❀2 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
杜子不疼.2 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
小幽余生不加糖2 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频
..过云雨3 小时前
01.【数据结构-C语言】数据结构概念&算法效率(时间复杂度和空间复杂度)
c语言·数据结构·笔记·学习
myzzb3 小时前
基于uiautomation的自动化流程RPA开源开发演示
运维·python·学习·算法·自动化·rpa
岑梓铭4 小时前
考研408《计算机组成原理》复习笔记,第五章(3)——CPU的【数据通路】
笔记·考研·408·计算机组成原理·计组
非凡ghost6 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
云间月13148 小时前
飞算JavaAI智慧教育场景实践:从个性化学习到教学管理的全链路技术革新
学习·飞算javaai挑战赛