spring cloud学习笔记-feign的基础配置及修改日志输出类型

本文是关于Spring Cloud Feign的学习笔记,主要内容包括Feign的基础配置、自定义配置类的注意事项、如何设置FeignClient的日志级别以及解决初次请求超时的问题。通过自定义配置避免初始化冲突,调整日志输出,以及调整Hystrix超时设置来优化Feign的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码地址

Feign配置

#Hystrix支持,如果为true,hystrix库必须在classpath中
feign.hystrix.enabled=false

#请求和响应GZIP压缩支持
feign.compression.request.enabled=true
feign.compression.response.enabled=true
#支持压缩的mime types
feign.compression.request.enabled=true
feign.compression.request.mime-types=text/xml,application/xml,application/json
feign.compression.request.min-request-size=2048

# 日志支持
logging.level.project.user.UserClient: DEBUG

自定义配置

自定义配置类不能定义在启动类和Composcan扫描到的类中,要不会被重复初始化,引起冲突

    1. 定义自定义配置类
package com.wy2.cloud.microservice.user.configuration;

import feign.Contract;
import feign.Logger;
import org.springframework.context.annotation.Bean;

/**
 * 系统名称 xx平台
 * 工程名称 wy2-cloud
 * 创建时间 2017/9/13 11:46
 *
 * @author admin
 * @since 1.8
 */
public class FeignClientConfiguration {

/*    @Bean
    public Contract feignContract(){
        Contract.Default contract = new Contract.Default();
        return contract;
    }*/

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}
  • 2.配置FeignClient日志级别(消费服务的接口所在包,必须是debug)
logging:
  level:
    com:
      wy2:
        cloud:
          microservice:
            user:
              service: debug
  • 3.消费接口注解中增加配置
    @FeignClient(name=”${self.userServiceId}”,fallback = UserServiceHystrix.class,configuration ={FeignClientConfiguration.class})
package com.wy2.cloud.microservice.user.service;

import com.wy2.cloud.microservice.pojo.user.UserLoginInput;
import com.wy2.cloud.microservice.pojo.user.UserLoginResult;
import com.wy2.cloud.microservice.user.configuration.FeignClientConfiguration;
import com.wy2.cloud.microservice.user.hystrix.UserServiceHystrix;
import com.wy2.cloud.pojo.security.User;
import com.wy2.cloud.pojo.security.UserPermission;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 系统名称 xx平台
 * 工程名称 wy2-cloud
 * 创建时间 2017/6/2 15:34
 * ,configuration = FeignClientConfiguration.class
 * @author admin
 * @since 1.8
 */
@FeignClient(name="${self.userServiceId}",fallback = UserServiceHystrix.class,
configuration ={FeignClientConfiguration.class})
public interface UserService {

    @RequestMapping(method = RequestMethod.POST,value="/login",
            produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE)
    public UserLoginResult login(UserLoginInput userLoginInput);

    @RequestMapping(method = RequestMethod.POST,value="/loadUserByUsername")
    public User loadUserByUsername(@RequestParam("userName") String userName);

    @RequestMapping(method = RequestMethod.POST,value="/getPermissions")
    public List<UserPermission> getPermissions();
}

  • 4.成功后出现如下日志:
2017-09-13 14:43:41.491 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] ---> POST http://service-user/login HTTP/1.1
2017-09-13 14:43:41.492 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] Accept: application/json
2017-09-13 14:43:41.492 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] Content-Type: application/json
2017-09-13 14:43:41.492 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] Content-Length: 38
2017-09-13 14:43:41.492 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] 
2017-09-13 14:43:41.492 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] {"account":"dddd","password":"111111"}
2017-09-13 14:43:41.492 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] ---> END HTTP (38-byte body)
2017-09-13 14:43:41.502 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] <--- HTTP/1.1 200 (10ms)
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] content-type: application/json;charset=UTF-8
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] date: Wed, 13 Sep 2017 06:43:41 GMT
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] transfer-encoding: chunked
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] x-application-context: service-user:dev:7010
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] 
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] {"id":"81157080e6da4427a69a43b6fcb8a7fa","name":null,"email":"mengwzy@qq.com","createTime":1496374560000,"status":1,"account":"dddd","phone":null,"sex":null,"birthday":null}
2017-09-13 14:43:41.503 [hystrix-service-user-3] DEBUG c.w.c.m.user.service.UserService - [UserService#login] <--- END HTTP (173-byte body)

Logger.Level支持

必须为每一个Feign Client配置来告诉Feign如何输出日志,可选:

NONE, No logging (DEFAULT).
BASIC, Log only the request method and URL and the response status code and execution time.
HEADERS, Log the basic information along with request and response headers.
FULL, Log the headers, body, and metadata for both requests and responses.

FeignClient第一次请求报TimeOut问题解决方案

  • 延长hystix的连接超时时间,默认时间是1秒
//在application配置文件中添加如下配置:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:5000
  • 禁用hystix的超时时间
//在application配置文件中添加如下配置:
hystrix.command.default.execution.timeout.enabled: false
  • 禁用hystix
//在application配置文件添加如下配置信息:
feign.hystrix.enabled: false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值