Spring Cloud —— Feign 实现服务调用

引言

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

一、什么是Feign

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

// 调用商品微服务,查询商品信息
Product prod = restTemplate.getForObject(
        "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 的使用

微服务调用关系图:

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

1、添加 Feign 依赖

<!--Feign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

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

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class OrderApplication {
    ...

3、创建 Feign 接口类

@FeignClient("service-product")
public interface ProductService {

    @GetMapping("/product/{pid}")
    public Product findByPid(@PathVariable("pid") Integer pid);
}

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

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

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

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

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页