当前位置:   article > 正文

使用OpenFeign实现服务远程调用_openfeign远程调用案例

openfeign远程调用案例

目录

前言

一、OpenFeign介绍

二、OpenFeign作用

三、OpenFeign使用示例

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

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

(1) 引入依赖

(2) 启用OpenFeign

(3) 编写OpenFeign客户端

(4) 使用FeignClient

总结


前言

当微服务架构日益普及,服务之间的远程调用变得至关重要。在这一背景下,OpenFeign作为一个强大的HTTP客户端框架简化了服务之间的远程通信。本文旨在介绍如何运用OpenFeign实现服务远程调用。


一、OpenFeign介绍

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

英文文档地址:

Spring Cloud OpenFeignicon-default.png?t=N7T8https://spring.io/projects/spring-cloud-openfeign中文文档地址:

Spring Cloud OpenFeign 中文文档 (springdoc.cn)icon-default.png?t=N7T8https://springdoc.cn/spring-cloud-openfeign/

二、OpenFeign作用

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

三、OpenFeign使用示例

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

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

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

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

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

(1) 引入依赖

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

  1. <!--openFeign-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>
  6. <!--负载均衡器-->
  7. <dependency>
  8. <groupId>org.springframework.cloud</groupId>
  9. <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  10. </dependency>

(2) 启用OpenFeign

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

  1. @EnableFeignClients
  2. @SpringBootApplication
  3. public class CartApplication {// ... }

(3) 编写OpenFeign客户端

  1. @FeignClient("item-service")
  2. public interface ItemClient {
  3. @GetMapping("/items")
  4. List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);
  5. }

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

@FeignClient("item-service")声明服务名称
@GetMapping声明请求方式
@GetMapping("/items")声明请求路径
@RequestParam("ids") Collection<Long> ids声明请求参数
List<ItemDTO>声明返回值类型

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

(4) 使用FeignClient

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

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


总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/84525
推荐阅读
相关标签
  

闽ICP备14008679号