Spring Cloud —— Feign 实现服务调用

悠悠 2022-12-10 14:44 360阅读 0赞

引言

本篇博客简单介绍 Feign 的基础知识和基本应用,以前一篇博客《Spring Cloud Alibaba——Nacos实现服务治理》为代码基础,实现更简单的微服务调用方式。

一、什么是Feign

restTemplate 实现的微服务调用方式:

  1. // 调用商品微服务,查询商品信息
  2. Product prod = restTemplate.getForObject(
  3. "http://" + prodService.getHost() + ":" + prodService.getPort() + "/product/" + pid, Product.class);

依然存在一些不尽如人意的地方:

1、代码可读性不好

2、编码风格不统一。调用本地服务使用 @Autowired 注入的方式,而调用远程的服务是使用 restTemplate 调用。

基于以上两点问题,就出现了新的 Spring Cloud 组件 —— Feign。

Feign 是 Spring Cloud 提供的一个声明式伪 HTTP 客户端。它使得调用远程服务就像调用本地服务一样优雅,只需要创建一个接口并添加一个注解即可。

Nacos 很好的兼容了 Feign ,Feign 默认集成了 Ribbon,所以在 Nacos 下使用 Feign 默认就实现了负载均衡的效果。

二、Feign 的使用

微服务调用关系图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ3NDUwNjk_size_16_color_FFFFFF_t_70

上图中微服务调用关系是 通过 订单微服务 调用 商品微服务 查询商品信息,因此关于 Feign 的相关编码也都是在 shop-order 微服务上。

1、添加 Feign 依赖

  1. <!--Feign-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

2、在主类上添加 @EnableFeignClients 注解

  1. @EnableDiscoveryClient
  2. @EnableFeignClients
  3. @SpringBootApplication
  4. public class OrderApplication {
  5. ...

3、创建 Feign 接口类

  1. @FeignClient("service-product")
  2. public interface ProductService {
  3. @GetMapping("/product/{pid}")
  4. public Product findByPid(@PathVariable("pid") Integer pid);
  5. }

4、将调用方式从 restTemplate 改为 Feign:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ3NDUwNjk_size_16_color_FFFFFF_t_70 1

然后启动订单和商品微服务,请求http://localhost:8091/order/prod/\{pid\} 接口发送下单请求:

20200926213313406.png

可以看到商品信息无误,说明订单微服务已经成功获取到商品信息。

说明,以上案例的代码做了大量的省略,主要是去掉了一些数据库操作和配置等不必要的编码展示,具体操作都已经写在《Spring Cloud Alibaba——Nacos实现服务治理》中。

发表评论

表情:
评论列表 (有 0 条评论,360人围观)

还没有评论,来说两句吧...

相关阅读