SpringCloud openfeign声明式服务调用实现方法介绍

 更新时间:2022年12月07日 17:17:15   作者:幽默涵养miss u  
在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用

一、介绍

OpenFeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)(称OpenFeign作用:声明式服务调用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。OpenFeign替换RestTemplate。

二、使用 

(1)导入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR12</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

(2)在启动类上添加扫描注解

/**
 * EnableFeignClients - 开启Openfeign技术。让spring cloud扫描Openfeign相关注解,
 * 生成动态代理实现对象。
 *  可选属性 basePackages = {"feign接口所在包1", "feign接口所在包2"}
 *  默认扫描当前类型所在包,及所有子孙包。
 */
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.bjsxt.feign"})
public class OpenFeignAppClientApp {
    public static void main(String[] args) {
        SpringApplication.run(OpenFeignAppClientApp.class, args);
    }
}

(3)编写本地接口

/**
 * 定义接口,基于注解,实现声明式远程服务调用。
 * 技术是OpenFeign。
 * 需要确定的事情:
 *  1. 访问的远程服务名称是什么。
 *  2. 访问的远程服务具体地址是什么。
 *  3. 访问的远程服务请求方式是什么。
 *  4. 访问的远程服务,参数是什么。
 *  5. 访问的远程服务,返回结果类型是什么。
 *
 * FeignClient - 代表当前的接口是一个OpenFeign客户端,要访问远程的服务。
 *  具体的实现类对象,由spring cloud动态生成代理对象来实现。
 *  必要属性: value - 要访问的远程服务命名是什么。
 */
@FeignClient("application-service")
public interface AppServiceOpenfeignClient {
    /**
     * 定义方法。使用SpringMVC注解+方法定义,实现远程服务访问规则定义。
     * 建议写法: 找到要访问的控制器。复制对应的方法签名即可。
     *
     * GetMapping - 约束了请求方式
     *  注解属性value - 约束了请求的具体地址
     * 方法返回值 - 约束了远程服务返回结果类型
     * 方法参数表 - 约束了远程服务的请求参数
     */
    @GetMapping("/getNoParams")
    public String getNoParams();
    /**
     * post请求,无参数
     * @return
     */
    @PostMapping("/postNoParams")
    public String postNoParams();
}

(4)本地接口注意事项

形参需要添加对应注解如@RequestParam,@RequestBody,@PathVariable等。

三、通讯优化

(1)配置OpenFeign请求-应答的GZIP压缩

# 配置openfeign请求和应答的gzip压缩处理
feign:
  compression:
    request:
      enabled: true  # 开启请求压缩处理。默认false
      min-request-size: 128  # 请求容量多少,开始压缩。默认2048字节
      mime-types: text/html, text/xml, text/plain, text/css, application/json # 请求头content type是什么,做压缩处理
    response:
      enabled: true # 开启响应压缩处理。默认false

(2)Tomcat服务器GZIP优化配置

server:
  compression:
    enabled: true  # 是否开启响应压缩处理。默认false
    mime-types: text/html, text/xml, text/plain, text/css, text/javascript, application/javascript, application/json, application/xml # 响应content type什么类型,做压缩处理。
    min-response-size: 128  # 响应容量多大,做压缩处理。 默认2048字节

到此这篇关于SpringCloud openfeign声明式服务调用实现方法介绍的文章就介绍到这了,更多相关SpringCloud openfeign内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis的核心配置文件使用方法

    Mybatis的核心配置文件使用方法

    Mybatis的核心配置文件有两个,一个是全局配置文件,它包含了会深深影响Mybatis行为的设置和属性信息;一个是映射文件,它很简单,让用户能更专注于SQL代码,本文主要介绍了Mybatis的核心配置文件使用方法,感兴趣的可以了解一下
    2023-11-11
  • SpringBoot发送html邮箱验证码功能

    SpringBoot发送html邮箱验证码功能

    这篇文章主要介绍了SpringBoot发送html邮箱验证码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • MapStruct到底是什么?

    MapStruct到底是什么?

    今天给大家带来的是关于Java的相关知识,文中围绕MapStruct到底是什么展开,文中有非常详细的解释及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java索引越界异常Exception java.lang.IndexOutOfBoundsException的解决

    Java索引越界异常Exception java.lang.IndexOutOfBoundsException

    本文主要介绍了Java索引越界异常Exception java.lang.IndexOutOfBoundsException的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • java中InputStream获取字节大小相关方法详解

    java中InputStream获取字节大小相关方法详解

    这篇文章主要给大家介绍了关于java中InputStream获取字节大小相关方法的相关资料,在Java中要实现读取文件大小,可以使用InputStream来读取文件的内容,并通过获取读取的字节数来得到文件的大小,需要的朋友可以参考下
    2023-11-11
  • 彻底理解Java中的ThreadLocal

    彻底理解Java中的ThreadLocal

     ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量。使用这个工具类可以很简洁地编写出优美的多线程程序。 接下来通过本文给大家介绍Java中的ThreadLocal,需要的朋友可以参考下
    2017-03-03
  • java 单例的五种实现方式及其性能分析

    java 单例的五种实现方式及其性能分析

    这篇文章主要介绍了java 单例的五种实现方式及其性能分析。的相关资料,需要的朋友可以参考下
    2017-07-07
  • 更改idea的JDK版本超简单便捷方法

    更改idea的JDK版本超简单便捷方法

    idea很多地方都设置了jdk版本,不同模块的jdk版本也可能不一样,下面这篇文章主要给大家介绍了关于更改idea的JDK版本的超简单便捷方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Springboot拦截filter中异常的处理

    Springboot拦截filter中异常的处理

    SpringBoot提供了全局异常处理机制可以拦截所有异常,包括Filter中的异常,本文主要介绍了Springboot拦截filter中异常的处理,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • java微信企业号开发之发送消息(文本、图片、语音)

    java微信企业号开发之发送消息(文本、图片、语音)

    这篇文章主要为大家详细介绍了java微信企业号开发之发送消息,发送类型包括文本、图片、语音,感兴趣的小伙伴们可以参考一下
    2016-06-06

最新评论