前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Alibaba - 13 OpenFeign应用篇

Spring Cloud Alibaba - 13 OpenFeign应用篇

作者头像
小小工匠
发布2022-02-04 15:16:33
3030
发布2022-02-04 15:16:33
举报
文章被收录于专栏:小工匠聊架构

文章目录

在这里插入图片描述
在这里插入图片描述

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 进行微服务调用 模式 , 那有什么弊端呢?

代码语言:javascript
复制
ResponseEntity<PayInfo> responseEntity = restTemplate.getForEntity(PAY_URI + orderInfo.getProductNo(), PayInfo.class);


#Ribbon调用

 @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

两个缺点:

  1. 如果构建的URL非常复杂,传递参数是个问题。
  2. 同时当业务比较复杂,很难理解。

Feign整合

artisan-feign-api 子模块构建

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

Step1 搞依赖

代码语言:javascript
复制
	<dependency>
			<groupId>org.springframework.cloudgroupId>
			<artifactId>spring-cloud-starter-openfeignartifactId>
		dependency>

Step2 修改打包方式

代码语言:javascript
复制
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

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

Step3 编写声明式接口

代码语言:javascript
复制
@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 搞依赖

代码语言:javascript
复制
	 <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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/02/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 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 构建
    • 测试
    • 源码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档