引言

本篇博客简单介绍 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实现服务治理》中。

Spring Cloud —— Feign 实现服务调用相关推荐

  1. Spring cloud alibaba--Feign微服务调用组件

    目录 1.1Feign优势 2.spring cloud alibaba整合Feign 3.Spring Cloud Feign日志配置 4.Feign契约配置 5.Feign超时时间配置 6.Ope ...

  2. Spring Cloud Feign使用详解

     通过前面两章对Spring Cloud Ribbon和Spring Cloud Hystrix的介绍,我们已经掌握了开发微服务应用时,两个重要武器,学会了如何在微服务架构中实现客户端负载均衡的服务调 ...

  3. Spring Cloud Feign原理详解

    目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring ...

  4. 《深入理解 Spring Cloud 与微服务构建》第八章 声明式调用 Feign

    ·# <深入理解 Spring Cloud 与微服务构建>第八章 声明式调用 Feign 文章目录 一.Feign 简介 1.简介 2.工作原理 二.写一个 Feign 客户端 三.Fei ...

  5. Spring Cloud Feign 1(声明式服务调用Feign 简介)

    Spring Cloud Feign基于Netflix Feign 同时整合了Spring Cloud Ribbon和Spring Cloud Hytrix,除了提供两者的强大功能外,它还提供了一种声 ...

  6. Spring Cloud构建微服务架构:服务消费(Feign)【Dalston版】

    Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口 ...

  7. Spring Boot + Spring Cloud 构建微服务系统(三):服务消费和负载(Feign)

    Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口 ...

  8. 最新版Spring Cloud Alibaba微服务架构-Openfeign服务调用篇

    文章目录 前言 一.OpenFeign配置使用 1.引入pom依赖 2.消费端开启Feign服务调用 3.消费端动态代理Service接口 3.消费端测试 二.OpenFeign日志配置 1.全局配置 ...

  9. java版b2b2c社交电商spring cloud分布式微服务-服务提供与调用

    java版b2b2c社交电商spring cloud分布式微服务源码请加企鹅求求:一零三八七七四六二六.上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册 ...

最新文章

  1. pandas使用apply函数:在dataframe数据列(column)上施加(apply)函数
  2. 在VS2010中创建自定义的代码段
  3. matlab 求x y关系,怎么用MATLAB建立数据间的函数关系
  4. 4.QT中进程操作,线程操作
  5. python策略模式包含角色_详解Python设计模式之策略模式
  6. C++接收字符串数组_Java 中初始化数组
  7. Can't create handler inside thread that has not called Looper.prepare()
  8. 怎样选择宽带上网产品--解读上海电信政企宽带新套餐
  9. linux如何运行java程序,Linux环境下运行简单java程序
  10. [网络流24题] 最长k可重线段集问题 (费用流)
  11. Vivado 查看HLS生成IP的资源和最高频率
  12. RPlidar学习(三)——RPlidar源代码库
  13. 1919: 【提高】滑翔翼
  14. Coursera奖学金申请模板
  15. 【转】Jsp自定义标签详解
  16. 淘宝运营 钻展基本了解 钻展投放方案 钻展投放注意的点
  17. SMBIOS信息概述 – DMI
  18. linux系统测试屏幕,RedHat Linux 9.0 操作系统测试题2
  19. 图像插值——线性差值
  20. objective-c语言特点及基础(相较于C语言)

热门文章

  1. java timezone_Java TimeZone getAvailableIDs()方法与示例
  2. c语言两个浮点数相加_C语言中两个浮点数或双精度数的模数
  3. 消息队列的其他实现方式
  4. Jsp中使用数据库连接池
  5. zoj 1091 Knight Moves
  6. EF中DB First模式下数据库中表结构变化时如何快速同步到EF模型中
  7. 什么是JSON? 以及jackson的使用
  8. linux2.6 gcc 4.8.2,在Red Hat Enterprise linux 6.5上安装GCC 4.8.2
  9. linux修图,修图只知道Photoshop?11款高逼格修图工具快来get!
  10. micropython用什么编译_micropython开发者指南