Spring Cloud Alibaba - 13 OpenFeign应用篇

简介: Spring Cloud Alibaba - 13 OpenFeign应用篇

6735aa4777de402592fbe82e8b40ee3d.png

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
    @LoadBalanced
    public 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 ,这里仅引用子模块即可。

d67066c072414341b79684221ad339cb.png


Step2 搞注解


开启注解加入 @EnableFeignClients


750e5f14aba74b16a160589facd1f2c0.png

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

5beeceef984a40ffb91a0165c2111da7.png

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

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


f6551e9020474412b77058b80261a553.png


测试

启动两个服务

artisan-cloud-feign-order

artisan-cloud-feign-product

访问Order服务提供的接口


6fd0c226db354c08a03e1b8d0314ac6d.png


源码

https://github.com/yangshangwei/SpringCloudAlibabMaster

相关文章
|
5天前
|
监控 Java Sentinel
Spring Cloud Sentinel:概念与实战应用
【4月更文挑战第28天】在分布式微服务架构中,确保系统的稳定性和可靠性至关重要。Spring Cloud Sentinel 为微服务提供流量控制、熔断降级和系统负载保护,有效预防服务雪崩。本篇博客深入探讨 Spring Cloud Sentinel 的核心概念,并通过实际案例展示其在项目中的应用。
14 0
|
7天前
|
XML Java 数据格式
手写spring第六章-实现应用上下文,完成bean的扩展机制
手写spring第六章-实现应用上下文,完成bean的扩展机制
13 0
|
9天前
|
消息中间件 Java 中间件
第十六章 Spring cloud stream应用
第十六章 Spring cloud stream应用
14 0
|
9天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
20 0
|
9天前
|
存储 前端开发 Java
第十一章 Spring Cloud Alibaba nacos配置中心
第十一章 Spring Cloud Alibaba nacos配置中心
16 0
|
9天前
|
消息中间件 SpringCloudAlibaba Java
第十章 SpringCloud Alibaba 之 Nacos discovery
第十章 SpringCloud Alibaba 之 Nacos discovery
|
9天前
|
负载均衡 前端开发 Java
第六章 Spring Cloud 之 OpenFeign
第六章 Spring Cloud 之 OpenFeign
11 0
|
10天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
SpringCloudAlibaba 网络协议 Cloud Native
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。
2476 0
Spring Cloud Alibaba-全面详解(学习总结---从入门到深化)
|
9月前
|
Java Nacos Sentinel
Spring Cloud Alibaba学习指南
由于在2018年Netflix公司宣布对其核心组件Hystrix、Ribbon、zuul、Eureka等进入维护状态,也就是Spring Cloud Netflix系列。由此Spring Cloud Alibaba就诞生了,值得注意的是Spring Cloud Alibaba完全兼容了Spring Cloud Netflix中的Ribbon、Feign、Eureka等组件,所以基于Spring Cloud Netflix的项目可以无缝迁移到Spring Cloud Alibaba。
408 0