微服务组件 Open Feign 远程调用

简介: OpenFeign是一个声明式的Web服务客户端,它是Spring Cloud生态系统中的一个组件,用于简化和优化微服务之间的远程调用。通过使用注解和接口定义的方式,开发者可以轻松地实现对其他微服务的访问。使用OpenFeign,您只需定义一个接口,并通过注解来配置该接口对应的远程服务的URL、请求方法、请求参数等信息,OpenFeign将自动生成可用于调用远程服务的实现。这样,您就可以像调用本地方法一样调用远程服务,而无需编写繁琐的HTTP请求和解析代码。

 微服务组件 Open Feign 远程调用

一,什么是 Open Fegin

OpenFeign是一个声明式的Web服务客户端,它是Spring Cloud生态系统中的一个组件,用于简化和优化微服务之间的远程调用。通过使用注解和接口定义的方式,开发者可以轻松地实现对其他微服务的访问。

使用OpenFeign,您只需定义一个接口,并通过注解来配置该接口对应的远程服务的URL、请求方法、请求参数等信息,OpenFeign将自动生成可用于调用远程服务的实现。这样,您就可以像调用本地方法一样调用远程服务,而无需编写繁琐的HTTP请求和解析代码。

OpenFeign还提供了许多有用的功能,例如负载均衡、超时控制、熔断降级等。它与Spring Cloud集成紧密,可以与服务注册中心(如Eureka或Nacos)和负载均衡器(如Ribbon)等组件配合使用,实现服务的发现和动态路由。

总之,OpenFeign简化了微服务之间的通信过程,使得开发者可以更加便捷地进行远程调用,提高了开发效率和代码的可读性。同时,它也是构建基于Spring Cloud的分布式微服务架构中不可或缺的关键组件之一。

二,Open Fegin注解

@FeignClient 和 @EnableFeignClients 都是 OpenFeign 中使用的注解,但它们的作用和使用场景略有不同。

    1. @FeignClient:

    @FeignClient 注解用于标记一个接口为 OpenFeign 的远程服务客户端。它通常被放置在定义远程服务调用的接口上,并通过 value 属性指定要调用的远程服务名称,可以是服务注册中心中的服务名。

    示例:

    @FeignClient(value = "service-name") 
    public interface MyServiceClient {
     // 接口方法定义 
    }

    image.gif

    通过 @FeignClient 注解,我们可以定义远程服务的调用接口,并通过它来实现远程服务的调用和数据传输。

    2. @EnableFeignClients:

    @EnableFeignClients 注解用于在 Spring Boot 应用中启用 Feign 客户端功能。它一般被放置在主应用程序类上,用于扫描并启用带有 @FeignClient 注解的接口。

    示例:

    @SpringBootApplication
    @EnableFeignClients 
    public class MyApp { 
    public static void main(String[] args){
     SpringApplication.run(MyApp.class, args); 
        }
    }

    image.gif

    通过在主应用程序类上添加 @EnableFeignClients 注解,我们可以启用 OpenFeign 功能,并使其扫描和管理 @FeignClient 标记的接口。

    总结:@FeignClient 是用于标记接口作为 OpenFeign 远程服务客户端的注解,用于定义和配置远程服务调用。而 @EnableFeignClients 是用于在 Spring Boot 应用中启用 Feign 客户端功能的注解,它会扫描并启用带有 @FeignClient 注解的接口。

    3.@FeginClient注解参数介绍

    @FeignClient 注解的参数可以根据具体的需求进行配置,下面是 @FeignClient 注解的常用参数介绍:

      1. value

      :指定要调用的远程服务名称。可以是服务注册中心中的服务名,也可以是一个URL字符串。

        1. url

        :指定要调用的远程服务的URL地址,用于直接指定远程服务的URL而不使用服务注册中心。

          1. path

          :指定远程服务的基础路径,用于拼接在 value 或 url 的后面。

            1. contextId

            (Spring Cloud 2020.0.0及更高版本):为该Feign客户端创建一个特定的上下文ID,以避免与其他Feign客户端冲突。

              1. configuration

              :指定自定义的 Feign 配置类,用于覆盖默认的配置。配置类需要实现 feign.codec.Decoder、feign.codec.Encoder、feign.Contract 等接口。

                1. fallback

                :指定降级处理的类,当远程服务不可用时会执行该类中定义的备用逻辑。

                  1. fallbackFactory

                  :指定降级处理的工厂类,用于创建降级处理类的实例。

                    1. primary

                    :标识当前 Feign 客户端是否为首选的 Bean,即当有多个同类型的 Feign 客户端时,优先选择此客户端。

                      1. decode404

                      :是否将 404 错误解码为正常的响应。默认情况下,OpenFeign 将 404 错误解码为 null。设置为 true 可以对 404 错误进行解码。

                        1. qualifier

                        (Spring Cloud 2020.0.0及更高版本):作为合格者限定符,用于解决多个合格的Bean之间的冲突。

                          1. name

                          (Spring Cloud 2020.0.0及更高版本):指定该客户端的名称。

                          这些参数可以根据实际需求进行配置,例如通过 value 指定要调用的服务名称,通过 fallback 指定降级处理类等。在使用 @FeignClient 注解时,根据具体的场景和需求选择适当的参数进行配置,以实现远程服务调用。

                          三,总结

                          本文主要介绍了微服务组件 OpenFeign 远程调用的概念、作用和常用注解。OpenFeign 是一个声明式的 Web 服务客户端,用于简化和优化微服务之间的远程调用。通过使用注解和接口定义的方式,开发者可以轻松地实现对其他微服务的访问。常用的注解包括 @FeignClient 和 @EnableFeignClients,@FeignClient 用于标记接口为 OpenFeign 远程服务客户端,并通过参数配置远程服务的调用,@EnableFeignClients 则用于启用 Feign 客户端功能,扫描并启用带有 @FeignClient 注解的接口。在使用 @FeignClient 注解时,根据具体的场景和需求选择适当的参数进行配置,以实现远程服务调用。

                                 深入了解可以观看官网介绍

                          Spring Cloud OpenFeign 中文文档 (springdoc.cn)

                          目录
                          相关文章
                          |
                          4天前
                          |
                          机器学习/深度学习 负载均衡 Java
                          【SpringBoot系列】微服务远程调用Open Feign深度学习
                          【4月更文挑战第9天】微服务远程调度open Feign 框架学习
                          |
                          4天前
                          |
                          Dubbo Java 应用服务中间件
                          微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
                          此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
                          |
                          3天前
                          |
                          存储 SpringCloudAlibaba Java
                          【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
                          【微服务 SpringCloud】实用篇 · 服务拆分和远程调用
                          18 2
                          |
                          3天前
                          |
                          JSON SpringCloudAlibaba Java
                          【微服务 SpringCloudAlibaba】实用篇 · Feign服务远程调用
                          【微服务 SpringCloudAlibaba】实用篇 · Feign服务远程调用
                          14 0
                          |
                          4天前
                          |
                          负载均衡 Java Apache
                          【微服务系列笔记】Feign
                          Feign是一个声明式的伪HTTP客户端,它使得HTTP请求变得更简单。使用Feign,只需要创建一个接口并注解。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。 OpenFeign 是SpringCloud在Feign的基础上支持了SpringMVC的注解。
                          38 8
                          |
                          4天前
                          |
                          SpringCloudAlibaba 负载均衡 Java
                          【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
                          【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
                          51 0
                          |
                          4天前
                          |
                          存储 负载均衡 Java
                          【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
                          【Spring底层原理高级进阶】微服务 Spring Cloud 的注册发现机制:Eureka 的架构设计、服务注册与发现的实现原理,深入掌握 Ribbon 和 Feign 的用法 ️
                          |
                          4天前
                          |
                          Java Apache 开发者
                          【微服务】5、声明式 HTTP 客户端 —— Feign
                          【微服务】5、声明式 HTTP 客户端 —— Feign
                          49 0
                          |
                          4天前
                          |
                          负载均衡 前端开发 Java
                          字节后端面试题(前端发送请求到后端的过程(MVC),网关gateway作用,怎么解决跨域,各微服务组件作用)
                          字节后端面试题(前端发送请求到后端的过程(MVC),网关gateway作用,怎么解决跨域,各微服务组件作用)
                          158 0
                          |
                          4天前
                          |
                          负载均衡 监控 Java
                          【使用OpenFeign在微服务中进行服务间通信】—— 每天一点小知识
                          【使用OpenFeign在微服务中进行服务间通信】—— 每天一点小知识