Spring Cloud Alibaba - 13 OpenFeign应用篇
文章目录
- 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、JAXRS2.0以及WebSocket。
Feign可帮助我们更加便捷、优雅地调用HTTP API.
在Spring Cloud中,使用Feign非常简单——只需创建接口,并在接口上添加注解即可。
Feign支持多种注解,例如Feign自带的注解或者JAXRS注解等。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();}
两个缺点:
如果构建的URL非常复杂,传递参数是个问题。
同时当业务比较复杂,很难理解。
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应用篇相关推荐
- Spring Cloud Alibaba(13)---Sleuth概述
Spring Cloud Alibaba(13)-Sleuth概述 Sleuth概述 前言 在微服务架构中,众多的微服务之间互相调用,如何清晰地记录服务的调用链路是一个需要解决的问题.同时,由于各种原 ...
- Spring Cloud Alibaba - 14 OpenFeign自定义配置 + 调用优化 + 超时时间
文章目录 打印Feign调用日志 日志级别 三部曲 step1 添加Feign的自定义配置 step2 声明式接口指定配置 Step3 声明式接口包日志级别调整为DEBUG 验证 基于yml文件细粒度 ...
- Spring Cloud Alibaba - 07 Ribbon 应用篇及内置的负载均衡算法
文章目录 Ribbon整合三部曲 artisan-cloud-ribbon-order step1 搞依赖 step2 搞注解 (在RestTemplate上加入@LoadBalanced注解) St ...
- Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)
文章目录 Pre 工程 首先屏蔽细粒度配置 然后通过代码设置一个全局配置 指定 GlobalRibbonConfig GlobalRibbonConfig 设置负载均衡策略 开发自定义策略 (权重访问 ...
- 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...
- openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba
1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...
- 最新版Spring Cloud Alibaba微服务架构-Config配置中心篇
文章目录 前言 一.Config引入背景 1.文件相对分散 2.无法区分环境 3.无法实时更新 4.安全无法保证 二.Config引入配置 1.配置文件格式 1.1 命名空间(Namespace) 1 ...
- 谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现
文章目录 Spring Cloud Alibaba--微服务开发 Spring Cloud Alibaba是什么? 主要功能 组件 为什么不使用Spring Cloud 使用 Nacos Disc ...
- 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内
背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...
最新文章
- PHP mysql 写入多条记录_PHP mysql插入多条记录的Array数组获取问题
- 安装Python2.7出现configure: error: no acceptable C compiler found in $PATH错误
- 李开复老师:微博改变一切
- maven 如何给web项目添加jar包依赖
- SAP CRM和Cloud for Customer的organization unit
- [Android]AndroidBucket增加碎片SubLayout功能及AISubLayout的注解支持
- MindSpore小笔记
- python 数据写入json文件时中文显示Unicode编码问题
- 获得阿里巴巴编码规范技能认证
- 数据结构——动态链表
- 【android自定义控件】TextView详解及自定义一
- 标定学习笔记(五)-- Halcon手眼标定例程:Hand-eye-Calibration with a moving cam
- html如何制作表格合并,html如何合并表格
- 完整安装minidwep-gtk教程
- sql注入之——sql注入防御方法
- 基于卷积神经网络进行图像分类
- android图形框架之surfaceflinger分析(一)
- SD/TF卡驱动(二)--------SD卡程序初始化流程以及读写
- 37.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。
- 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】
热门文章
- c语言程序的标识符分类,华中科技大学计算机学院C语言程序设计标识符.PPT
- java 中遍历目录下所有文件
- j2ee html5,HTML5+J2EE实现文件异步上传
- gcc编译选项-o和-c介绍
- 安卓桌面软件哪个好_安卓模拟器哪个比较好?
- Attention-OCR(Attention-based Extraction of Structured Information from Street View Imagery)
- Leetcode - 144. Binary Tree Preorder Traversal (层次遍历)
- python文件操作2:在指定目录下查找指定后缀名的文件
- Python应用实战案例-Python使用MODIS数据实现温度植被干旱指数TVDI的计算
- 背景和文字分离的matlab实现