前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud 系列之服务调用 OpenFeign

Spring Cloud 系列之服务调用 OpenFeign

作者头像
Demo_Null
发布2020-11-11 17:52:34
7900
发布2020-11-11 17:52:34
举报
文章被收录于专栏:Java 学习Java 学习

1.1 简介

1.1.1 概述

  Feign 旨在使编写 Java Http 客户端变得更容易。在使用 Ribbon + RestTemplate 时,利用 RestTemplate 对 http 请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign 在 Ribbon 基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在 Feign 的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用 Spring cloud Ribbon 时,自动封装服务调用客户端的开发量。与 Ribbon 不同的是,通过 Feign 只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用   Feign 已经停止维护,OpenFeign 是 Spring Cloud 在 Feign 的基础上进一步开发出来替代 Feign 的技术,支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

1.1.2 相关依赖

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

1.2 简单使用

1.2.1 基础工程

☞ eureka 项目

1.2.2 Feign 客户端

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/11/5
 * @description Feign 接口
 */
@Component
@FeignClient("ProviderServer")	// 服务提者名称
public interface ProviderFeign {

    @GetMapping("/provider/get")	// 服务地址
    public String get();
}

1.2.3 启动类

代码语言:javascript
复制
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

1.2.4 调用服务

  我们可以发现 Feign 自带负载均衡配置,而 OpenFeign 默认支持 Ribbon,我们可以通过 Ribbon 的配置来修改负载均衡策略。Ribbon 详情参考 ☞ Spring Cloud 系列之负载均衡 Ribbon

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

1.3 其他配置

1.3.1 超时控制

代码语言:javascript
复制
# 设置 feign 客户端超时时间, 默认 1s
feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000


# OpenFeign 默认支持 Ribbon,也可以使用以下配置
ribbon:
  # 建立连接所用时间,适用于网络正常的情况下,两端连接所用的时间
  ConnectTimeout: 5000
  # 建立连接后从服务器读取到可用资源所用的时间
  ReadTimeout: 5000

1.3.2 数据压缩

代码语言:javascript
复制
feign:
  compression:
    request:
      # 开启数据压缩请求
      enabled: true
      # 压缩数据类型
      mime-types: text/xml, application/xml, application/json
      # 数据压缩下限 2048表示传输数据大于2048 才会进行数据压缩(最小压缩值标准)
      min-request-size: 2048
    # 开启数据压缩响应
    response:
      enabled: true

1.3.3 日志配置

☞ 日志级别

 ♞ NONE:不开启日志(默认)  ♞ BASIC:记录请求方法、URL、响应状态、执行时间  ♞ HEADERS:在 BASIC 基础上增加请求/响应头  ♞ FULL:在 HEADERS 基础上增加 body 和请求元数据

☞ 配置类
代码语言:javascript
复制
@Configuration
public class LogConfig {
    @Bean
    Logger.Level loggerLevel(){
        return Logger.Level.FULL;
    }
}
☞ 配置文件
代码语言:javascript
复制
logging:
  level:
    # 以什么级别监控那个接口
    com.software.controller: debug

☞ 输出

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

☞ 源码

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 简介
    • 1.1.1 概述
      • 1.1.2 相关依赖
      • 1.2 简单使用
        • 1.2.1 基础工程
          • 1.2.2 Feign 客户端
            • 1.2.3 启动类
              • 1.2.4 调用服务
              • 1.3 其他配置
                • 1.3.1 超时控制
                  • 1.3.2 数据压缩
                    • 1.3.3 日志配置
                      • ☞ 日志级别
                      • ☞ 配置类
                      • ☞ 配置文件
                    • ☞ 输出
                    相关产品与服务
                    负载均衡
                    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档