使用OpenFeign实现服务远程调用

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 当微服务架构日益普及,服务之间的远程调用变得至关重要。在这一背景下,OpenFeign作为一个强大的HTTP客户端框架简化了服务之间的远程通信。本文旨在介绍如何运用OpenFeign实现服务远程调用。

一、OpenFeign介绍

Spring Cloud OpenFeign是一个基于Spring Cloud的声明式REST客户端,旨在简化与HTTP服务的交互过程。它将REST客户端的定义转化为Java接口,并使用注解来声明请求参数、请求方式、请求头等信息,使得客户端的使用更加便捷和简洁。另外,它还提供了负载均衡和服务发现等功能,可与注册中心集成使用,是构建微服务架构的重要工具之一。

英文文档地址:

Spring Cloud OpenFeign

中文文档地址:

Spring Cloud OpenFeign 中文文档 (springdoc.cn)

二、OpenFeign作用

  • 简化HTTP客户端的编写:使用Feign接口和注解,开发者可以更加便捷地定义HTTP请求,无需手动编写HTTP请求代码,从而减少代码量,提高开发效率。
  • 统一配置:OpenFeign支持在应用程序启动时加载配置文件,实现了统一配置,方便了配置的管理和维护,降低了配置管理的复杂度。
  • 支持多种HTTP客户端:OpenFeign支持多种HTTP客户端,如OkHttp、HttpClient等,可以根据实际需求选择合适的HTTP客户端。
  • 支持负载均衡:OpenFeign内置了负载均衡机制,可以自动实现请求的负载均衡,提高了系统的性能和可伸缩性。

三、OpenFeign使用示例

1.不使用OpenFeign实现服务远程调用(RestTemplate)

基于RestTemplate实现的远程服务调用,代码可能较为复杂,但远程调用的关键核心主要集中在四个方面:请求方法请求路径请求参数返回值类型

// 发现item-service服务的实例列表
List<ServiceInstance> instances = discoveryClient.getInstances("item-service");
// 负载均衡,挑选一个实例
ServiceInstance instance = instances.get(RandomUtil.randomInt(instances.size()));
// 发送请求,查询商品
ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(
        instance.getUri() + "/items?ids={ids}", // 请求路径
        HttpMethod.GET, // 请求方式
        null, // 请求实体
        new ParameterizedTypeReference<List<ItemDTO>>() {}, // 返回值类型
        Map.of("ids", CollUtil.join(itemIds, ",") // 请求参数
);

2.使用OpenFeign实现服务远程调用

OpenFeign则利用SpringMVC的相关注解来声明上述四个参数。通过动态代理,OpenFeign能够自动生成远程调用的代码,从而避免了手动编写,极大地提高了便利性。步骤如下:

(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>

(2) 启用OpenFeign

通过 @EnableFeignClients注解,启用OpenFeign功能:

@EnableFeignClients
@SpringBootApplication
public class CartApplication {// ...  }

(3) 编写OpenFeign客户端

@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 ids 声明请求参数
List 声明返回值类型

OpenFeign可以利用动态代理实现这个方法,并且向 http://item-service/items 发送一个GET请求,携带 ids 为请求参数,并自动将返回值处理为 List 类型。

(4) 使用FeignClient

最终在 cart-service 中进行代码改造,通过直接调用 ItemClient 的方法,OpenFeign 将完成服务的拉取、负载均衡和HTTP请求发送等所有工作:

List<ItemDTO> items = itemClient.queryItemByIds(List.of(1,2,3));

总结

本文主要介绍了如何运用OpenFeign实现服务远程调用,希望对大家有所帮助。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
监控 关系型数据库 MySQL
Nacos架构与原理 - 健康检查机制
Nacos架构与原理 - 健康检查机制
405 0
|
监控 druid Java
Spring Boot 3 集成 Druid 连接池详解
在现代的Java应用中,使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源,集成Druid连接池,以实现更高效的数据库连接管理。
9129 2
Spring Boot 3 集成 Druid 连接池详解
|
Java 计算机视觉
实现邮箱验证(邮箱验证码登录)
我们要实现web或者Java的发送邮箱验证码到邮箱上进行验证。当然我们需要做一下前提的准备,也就是先要导我们的jar包,然后再进行下一步的操作。
|
Java Spring 容器
在Feign接口中返回泛型类型——自定义Decoder
前几天对接了一套第三方接口,所有接口的请求地址一样,请求参数和响应结果中有很多共同的字段,所以就想把这些字段都抽出来,Feign定义的接口直接返回泛型类型。
在Feign接口中返回泛型类型——自定义Decoder
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
DynamicCity:上海AI Lab开源4D场景神器助力自动驾驶场景!128帧动态LiDAR生成,1:1还原城市早晚高峰
DynamicCity 是上海 AI Lab 推出的 4D 动态场景生成框架,专注于生成具有语义信息的大规模动态 LiDAR 场景,适用于自动驾驶、机器人导航和交通流量分析等多种应用场景。
186 1
|
Java 数据库 微服务
使用OpenFeign进行服务调用
本文档介绍如何在微服务架构中使用Spring Cloud的OpenFeign进行服务间的远程调用。首先,需在项目中引入OpenFeign及其负载均衡器依赖。接着,通过`@EnableFeignClients`启用Feign客户端功能,并定义客户端接口以声明远程服务调用逻辑。为确保启动类能正确扫描到这些接口,需指定`basePackages`属性。最后,演示了如何在购物车服务中利用Feign客户端接口调用商品服务,以实现跨服务的数据整合和查询。Feign通过动态代理机制简化了HTTP请求的发起过程,使服务间交互更为直观和便捷。
354 0
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
23822 0
|
负载均衡 Java 开发者
微服务组件 Open Feign 远程调用
OpenFeign是一个声明式的Web服务客户端,它是Spring Cloud生态系统中的一个组件,用于简化和优化微服务之间的远程调用。通过使用注解和接口定义的方式,开发者可以轻松地实现对其他微服务的访问。 使用OpenFeign,您只需定义一个接口,并通过注解来配置该接口对应的远程服务的URL、请求方法、请求参数等信息,OpenFeign将自动生成可用于调用远程服务的实现。这样,您就可以像调用本地方法一样调用远程服务,而无需编写繁琐的HTTP请求和解析代码。
410 0
|
前端开发 easyexcel Java
springboot使用EasyExcel导入数据(获取行号)
springboot使用EasyExcel导入数据(获取行号)
1286 1