Spring Cloud Alibaba - 13 OpenFeign应用篇
Posted 小小工匠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Alibaba - 13 OpenFeign应用篇相关的知识,希望对你有一定的参考价值。
文章目录
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
@LoadBalanced
public 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-MyShop-项目介绍
Spring Cloud Alibaba全家桶——Spring Cloud Alibaba介绍
Spring Cloud Alibaba系列教程——Spring Cloud Alibaba开篇