Spring Cloud(F版)Feign使用拓展

在上一篇文章中,简单的介绍了Feign的使用,【Spring Cloud(F版)服务调用Feign】,不是很了解的小伙伴可以前去看一看,Feign在Spring Cloud服务调用非常的方便,所以使用的人也特别多,有必要多开一篇来详细学习一下Feign跟细节的一些功能。

Feign和Ribbon以及Hystrix能很简单的进行整合,这里暂时先不介绍吧,等后面讲到Hystrix的时候再一起说明。

——————————————————————————————————————————————————————

开启GZIP压缩

Spring Cloud Feign支持对请求和响应进行GZIP压缩,以提高通信效率。配置方式如下:

feign:
  compression:
    request:
      # 配置请求GZIP压缩 默认false
      enabled: true
      # 配置压缩数据大小的下限
      min-request-size: 2048
      # 配置压缩支持的MIME TYPE
      mime-types:
        - text/html
        - application/xml
        - application/json
    response:
      # 配置响应GZIP压缩 默认false
      enabled: true

属性文件配置

配置方式:

feign:
  client:
    config:
      #需要配置的feignName
      feignName:
        #链接超时时间
        connectTimeout: 5000
        #读超时时间设置
        readTimeout: 5000
        #配置Feign日志级别
        loggerLevel: FULL
#        errorDecoder:  #Feign错误解码器
#        retryer:  #配置重试
        #配置拦截器
        requestInterceptors:
          - com.clarezhou.example.interceptor.MyRequestInterceptor
#        encoder: #Feign编码器
#        decoder: #Feign解码器
#        contract: #Feign Contract配置

Feign请求拦截器:
在进行认证鉴权的时候,不管是jwt,还是security,当使用Feign时就会发现外部请求到服务的时候,Token会丢失,从而认证失败,前一段时间我搭建Spring Cloud + OAuth2 单点登录框架的时候就遇到了这样的问题,解决方法比较简单,就是在拦截器中,向请求的头部中添加Token。

详细的内容我到时候会在另外一个专栏里面介绍。

package com.clarezhou.example.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;

/**
 * @author clarezhou
 * @date 2019/7/30 16:08
 **/
@Slf4j
@Configuration
public class MyRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        log.info("请求地址:{}",template.url());
        log.info("请求方法:{}",template.method());
        log.info("请求参数:{}",template.queryLine());
		template.header("Authorization", String.format("%s %s", "Bearer", "123456"));
    }
}

开启日志

1、除了上面的配置方式,还是通过以下方式配置开启日志

logging:
  level:
    com.clarezhou.example.service.HelloService: FULL

2、也可以在主程序入口类中添加@Bean注解

	@Bean
	Logger.Level feignLogger(){
		return Logger.Level.FULL;
	}

3、还可以通过@Configuration注解类来开启

package com.clarezhou.example.config;

import feign.Logger;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignServiceConfig {
	
	/**
	 * Logger.Level
	 * 	NONE:不记录任何信息
	 *  BASIC:仅记录请求方法、URL以及响应状态码和执行时间
	 *  HEADERS:除了记录BASIC级别的信息外,还会记录请求和响应的头信息
	 *  FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据
	 *  
	 * @return
	 */
	Logger.Level feignLoggerLevel(){
		return Logger.Level.FULL;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Gateway 本身并不能直接使用 FeignFeign 是一个用于声明式、模板化 HTTP 客户端的库,它可以帮助我们更方便地编写基于 HTTP 的服务调用代码。但是 Spring Cloud Gateway 更多地是作为一个 API 网关来使用,用于在微服务架构中进行请求路由、限流、熔断等操作。 虽然 Spring Cloud Gateway 和 Feign 都是基于 Spring 框架的,但它们的使用场景和功能不同,不能直接进行集成。不过,在实际的项目中,我们通常会同时使用 Spring Cloud Gateway 和 Feign 来完成不同的任务。比如,我们可以使用 Spring Cloud Gateway 进行路由、过滤等操作,而使用 Feign 进行服务间的调用。 ### 回答2: Spring Cloud Gateway 确实无法直接使用 Feign 进行服务间的通信。这是因为 Spring Cloud Gateway 和 Feign 是两个不同的组件,具有不同的设计理念和用途。 Spring Cloud Gateway 是一个基于 Spring WebFlux 和 Reactor 的网关服务,用于处理请求路由和转发。它支持使用各种方式定义路由规则,并且具有强大的过滤器功能,可以对请求进行修改和验证。Spring Cloud Gateway 更加注重对请求的处理和转发,而不是直接进行服务间的通信。 相比之下,Feign 是一个基于注解的轻量级 HTTP 客户端,用于服务间的通信。通过定义接口和注解,Feign 可以帮助我们简化 HTTP 请求的编写和发送,从而实现服务之间的互通。Feign 的设计初衷是为了简化服务间通信的代码编写和维护,而不是用于路由和转发请求。 然而,我们可以在 Spring Cloud Gateway 中使用 WebClient 进行服务间的通信。WebClient 是 Spring WebFlux 提供的用于发送 HTTP 请求的非阻塞客户端。我们可以在 Gateway 的过滤器中使用 WebClient 发送请求到目标服务,然后将响应返回给客户端。 综上所述,尽管 Spring Cloud Gateway 无法直接使用 Feign 进行服务间的通信,但我们仍然可以利用 WebClient 在 Gateway 中实现服务间的通信。这种方式可以更好地符合 Spring Cloud Gateway 的设计理念和用途。 ### 回答3: Spring Cloud Gateway和Feign是两个完全不同的组件,分别属于Spring Cloud的不同子项目。Spring Cloud Gateway是一个基于Spring Framework5,Spring Boot2和Project Reactor的新一代微服务网关,主要用于路由请求和进行过滤处理。而Feign是一个声明式的HTTP客户端,用于在微服务之间进行远程服务调用。 不能说Spring Cloud Gateway无法集成Feign,因为它们并不是相互替代的关系。在使用Spring Cloud Gateway时,一般是将Feign用作微服务之间的远程服务调用工具,而不是直接集成到Spring Cloud Gateway中。 当需要在Spring Cloud Gateway中进行远程服务调用时,可以使用Spring WebFlux提供的WebClient来实现。WebClient是一个响应式的HTTP客户端,可以用于发送请求并接收响应。通过使用WebClient,可以轻松地在Spring Cloud Gateway中进行远程服务调用。 总结来说,虽然Spring Cloud Gateway本身不直接支持Feign,但可以使用Spring WebFlux提供的WebClient在Spring Cloud Gateway中进行远程服务调用。在使用Spring Cloud Gateway时,可以结合Feign在微服务之间进行远程服务调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值