全局配置

通过 Options 可以配置连接超时时间和读取超时时间,Options 的第一个参数是连接的超时时间(ms),默认值是 2s;第二个是请求处理的超时时间(ms),默认值是 5s。

第一步:修改FeignConfig

package com.example.order.config;

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

/**
 * 全局配置:当使用@Configuration会将配置作用所有的服务提供方
 * 局部配置:如果只想针对某一个服务进行配置,就不要加@Configuration
 */
@Configuration
public class FeignConfig {

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

    /**
     * 修改契约配置,支持Feign原生的注解
     * @return
     */
//    @Bean
//    public Contract feignContract(){
//        return new Contract.Default();
//    }


    /**
     * 超时时间配置
     */
    @Bean
    public Request.Options options(){
        return new Request.Options(5000,4000);
    }
}

第二步:修改StockController或ProductController

package com.example.product.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/product")
public class ProductController {

    @Value("${server.port}")
    String port;

    @RequestMapping("/{id}")
    public String get(@PathVariable Integer id) throws InterruptedException {
        System.out.println("查询商品"+id);
        Thread.sleep(4000);
        return "查询商品"+id+":"+port;
    }

}

第三步:重启order模块和product模块

在这里插入图片描述

访问:http://localhost:8086/order/add

看订单模板的日志打印:

在这里插入图片描述

局部配置

第一种方式:通过配置文件

服务A调用服务B,连接超时时间就是A去请求B当中的网络连接时间;那这个读取时间呢,是我连接上服务之后,B服务处理的时间,如果B服务处理超过了指定时间,还没给A响应就会读取超时。

第一步:修改配置文件

server:
  port: 8086
#应用名称(nacos会将该名称当做服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
  # 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出
  # logging.level=debug这样配置是对所有的日志级别进行配置
  # 该场景只需要对feign接口进行debug配置,所以是这样配置logging.level.com.example.order.feign=debug
logging:
  level:
    com.example.order.feign: debug
feign:
  client:
    config:
      # 提供方的服务名
      product-service:
        #请求日志级别
        loggerLevel: BASIC
        contract: feign.Contract.Default #设置为默认的契约(还原成原生注解)
        # 连接超时时间,默认2s,设置单位为毫秒
        connectTimeout: 5000
        # 请求处理超时时间,默认5s,设置单位为毫秒。
        readTimeout: 3000

第二步:修改商品模块控制器ProductController

加上休眠4秒,从而达到超时测试
package com.example.product.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/product")
public class ProductController {

    @Value("${server.port}")
    String port;

    @RequestMapping("/{id}")
    public String get(@PathVariable Integer id) throws InterruptedException {
        System.out.println("查询商品"+id);
        Thread.sleep(4000);
        return "查询商品"+id+":"+port;
    }

}

第三步:重启order模块和product模块

![在这里插入图片描述](https://img-blog.csdnimg.cn/c7076f5ee4e2451da00b2482e7b9d24c.png)

访问:http://localhost:8086/order/add

看订单模板的日志打印:

在这里插入图片描述

第二种方式:通过配置类

服务A调用服务B,连接超时时间就是A去请求B当中的网络连接时间;那这个读取时间呢,是我连接上服务之后,B服务处理的时间,如果B服务处理超过了指定时间,还没给A响应就会读取超时。

第一步:修改application.yml

server:
  port: 8086
#应用名称(nacos会将该名称当做服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
  # 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出
  # logging.level=debug这样配置是对所有的日志级别进行配置
  # 该场景只需要对feign接口进行debug配置,所以是这样配置logging.level.com.example.order.feign=debug
logging:
  level:
    com.example.order.feign: debug
feign:
  client:
    config:
      # 提供方的服务名
      product-service:
        #请求日志级别
        loggerLevel: BASIC
        contract: feign.Contract.Default #设置为默认的契约(还原成原生注解)
        # 连接超时时间,默认2s,设置单位为毫秒
#        connectTimeout: 5000
#        # 请求处理超时时间,默认5s,设置单位为毫秒。
#        readTimeout: 3000

第二步:修改配置类FeignConfig

package com.example.order.config;

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

/**
 * 全局配置:当使用@Configuration会将配置作用所有的服务提供方
 * 局部配置:如果只想针对某一个服务进行配置,就不要加@Configuration
 */
//@Configuration
public class FeignConfig {

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

    /**
     * 修改契约配置,支持Feign原生的注解
     * @return
     */
//    @Bean
//    public Contract feignContract(){
//        return new Contract.Default();
//    }


    /**
     * 超时时间配置
     */
    @Bean
    public Request.Options options(){
        return new Request.Options(5000,4000);
    }
}

第三步:修改库存模块控制器StockController

由于之前的代码是库存模块的feignService是使用配置类配置。所以要测试则修改库存模块。
package com.example.stock.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/stock")
public class StockController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("/reduck")
    public String reduck() throws InterruptedException {
        System.out.println("扣减库存");
        Thread.sleep(4000);
        return "扣减库存" + port;
    }
}

第四步:启动订单模块和库存模块

在这里插入图片描述

访问:http://localhost:8086/order/add

看订单模板的日志打印:

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐