文章目录

  • What's Feign
  • ( Ribbon+RestTemplate) Vs Feign
  • Feign整合
    • artisan-feign-api 子模块构建
      • Step1 搞依赖
      • Step2 修改打包方式
      • Step3 编写声明式接口
    • 调用工程 artisan-cloud-feign-order 构建
      • Step1 搞依赖
      • Step2 搞注解
      • Step3 搞调用 (像调用本地方式一样调用远程服务)
    • 服务提供方artisan-cloud-feign-product 构建
  • 测试
  • 源码


What’s Feign

Feign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS­2.0以及WebSocket。

Feign可帮助我们更加便捷、优雅地调用HTTP API.

在Spring Cloud中,使用Feign非常简单——只需创建接口,并在接口上添加注解即可。

Feign支持多种注解,例如Feign自带的注解或者JAX­RS注解等。Spring Cloud对Feign进行了增强,使其支持SpringMVC注解.

另外还整合了Ribbon和Eureka,从而使得Feign的使用更加方便.


( Ribbon+RestTemplate) Vs Feign

前面的方式我们都是通过 Ribbon+RestTemplate 进行微服务调用 模式 , 那有什么弊端呢?


ResponseEntity<PayInfo> responseEntity = restTemplate.getForEntity(PAY_URI + orderInfo.getProductNo(), PayInfo.class);#Ribbon调用@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

两个缺点:

  1. 如果构建的URL非常复杂,传递参数是个问题。

  2. 同时当业务比较复杂,很难理解。


Feign整合

artisan-feign-api 子模块构建

采取开发中常用的套路 定义一个artisan-feign-api工程 ,用于单独管理和其他服务的接口。类似于DAO, COMMON这种模块


Step1 搞依赖

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

Step2 修改打包方式

 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId></plugin></plugins></build>

该工程式一个普通的jar 不需要打可执行的jar


Step3 编写声明式接口

@FeignClient(name = "artisan-product-center")
public interface ProductCenterFeignApi {/*** 声明式接口,远程调用http://artisan-product-center/selectProductInfoById/{productNo}* @param productNo* @return*/@RequestMapping("/selectProductInfoById/{productNo}")ProductInfo selectProductInfoById(@PathVariable("productNo") String productNo);}

这个声明式接口怎么写呢? --------- 直接把Controller接口 Copy过来即可。

调用工程 artisan-cloud-feign-order 构建

Step1 搞依赖

  <dependency><groupId>com.artisan</groupId><artifactId>artisan-feign-api</artifactId><version>1.0-SNAPSHOT</version></dependency>

引入刚才的子模块,因为依赖是传递的,所以也相当于引用了feign ,这里仅引用子模块即可。


Step2 搞注解

开启注解加入 @EnableFeignClients

Step3 搞调用 (像调用本地方式一样调用远程服务)

服务提供方artisan-cloud-feign-product 构建

同普通工程一样,无需改造


测试

启动两个服务

artisan-cloud-feign-order
artisan-cloud-feign-product

访问Order服务提供的接口

源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

Spring Cloud Alibaba - 13 OpenFeign应用篇相关推荐

  1. Spring Cloud Alibaba(13)---Sleuth概述

    Spring Cloud Alibaba(13)-Sleuth概述 Sleuth概述 前言 在微服务架构中,众多的微服务之间互相调用,如何清晰地记录服务的调用链路是一个需要解决的问题.同时,由于各种原 ...

  2. Spring Cloud Alibaba - 14 OpenFeign自定义配置 + 调用优化 + 超时时间

    文章目录 打印Feign调用日志 日志级别 三部曲 step1 添加Feign的自定义配置 step2 声明式接口指定配置 Step3 声明式接口包日志级别调整为DEBUG 验证 基于yml文件细粒度 ...

  3. Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法

    文章目录 Ribbon整合三部曲 artisan-cloud-ribbon-order step1 搞依赖 step2 搞注解 (在RestTemplate上加入@LoadBalanced注解) St ...

  4. Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)

    文章目录 Pre 工程 首先屏蔽细粒度配置 然后通过代码设置一个全局配置 指定 GlobalRibbonConfig GlobalRibbonConfig 设置负载均衡策略 开发自定义策略 (权重访问 ...

  5. 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...

  6. openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba

    1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...

  7. 最新版Spring Cloud Alibaba微服务架构-Config配置中心篇

    文章目录 前言 一.Config引入背景 1.文件相对分散 2.无法区分环境 3.无法实时更新 4.安全无法保证 二.Config引入配置 1.配置文件格式 1.1 命名空间(Namespace) 1 ...

  8. 谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现

    文章目录 Spring Cloud Alibaba--微服务开发 Spring Cloud Alibaba是什么?  主要功能  组件 为什么不使用Spring Cloud 使用 Nacos Disc ...

  9. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

最新文章

  1. PHP mysql 写入多条记录_PHP mysql插入多条记录的Array数组获取问题
  2. 安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误
  3. 李开复老师:微博改变一切
  4. maven 如何给web项目添加jar包依赖
  5. SAP CRM和Cloud for Customer的organization unit
  6. [Android]AndroidBucket增加碎片SubLayout功能及AISubLayout的注解支持
  7. MindSpore小笔记
  8. python 数据写入json文件时中文显示Unicode编码问题
  9. 获得阿里巴巴编码规范技能认证
  10. 数据结构——动态链表
  11. 【android自定义控件】TextView详解及自定义一
  12. 标定学习笔记(五)-- Halcon手眼标定例程:Hand-eye-Calibration with a moving cam
  13. html如何制作表格合并,html如何合并表格
  14. 完整安装minidwep-gtk教程
  15. sql注入之——sql注入防御方法
  16. 基于卷积神经网络进行图像分类
  17. android图形框架之surfaceflinger分析(一)
  18. SD/TF卡驱动(二)--------SD卡程序初始化流程以及读写
  19. 37.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。
  20. 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】

热门文章

  1. c语言程序的标识符分类,华中科技大学计算机学院C语言程序设计标识符.PPT
  2. java 中遍历目录下所有文件
  3. j2ee html5,HTML5+J2EE实现文件异步上传
  4. gcc编译选项-o和-c介绍
  5. 安卓桌面软件哪个好_安卓模拟器哪个比较好?
  6. Attention-OCR(Attention-based Extraction of Structured Information from Street View Imagery)
  7. Leetcode - 144. Binary Tree Preorder Traversal (层次遍历)
  8. python文件操作2:在指定目录下查找指定后缀名的文件
  9. Python应用实战案例-Python使用MODIS数据实现温度植被干旱指数TVDI的计算
  10. 背景和文字分离的matlab实现