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

相关文章
|
15天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
|
2月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
15天前
|
人工智能 Java API
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
|
2月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
26天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
255 7
|
5月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
2月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
2月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
343 13
Spring Cloud Alibaba:一站式微服务解决方案
|
6月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
181 1