FeignClient配置超时时间 单独配置 全局配置
三种FeignClient超时时间设置:1、全局默认超时时间2、对整个接口类单独配置超时时间3、对单独Feign方法设置超时时间
·
//by yan 20220629
1、配置文件设置超时时间
//application.properties
###### feign config
#全局默认设置
feign.client.config.default.connectTimeout=20000
feign.client.config.default.readTimeout=20000
#按微服务应用名称设置
feign.client.config.contract.connectTimeout=80000
feign.client.config.contract.readTimeout=80000
2、代码对整个接口类单独配置超时时间
@FeignClient(name = "xx", path = "xx",configuration = {FeignLogConfiguration.class, FeignTimeoutConfig.class})
public interface FeignXXXService {
}
@Configuration
public class FeignTimeoutConfig {
/**
*
* @Author Yan
* @Date 2022/6/29 11:57
* @Param []
* @return feign.Request.Options
**/
@Bean
Request.Options feignOptions() {
return new Request.Options(60 * 1000, 60 * 1000);
}
}
3、代码对单独Feign方法设置超时时间
//Feign接口方法定义
@RequestMapping(value="flow/getSignFile", method= RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Object getSignFile(Request.Options options, @RequestBody Map<String, Object> param);
//Spring 启动报错:
Caused by:
java.lang.IllegalStateException: Method has too many Body parameters: public abstract java.lang.Object com.duowan.hr.modules.app.services.FeignContractDocusignService.getSignFile(feign.Request$Options,java.util.Map)
at feign.Util.checkState(Util.java:128)
at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:114)
at org.springframework.cloud.netflix.feign.support.SpringMvcContract.parseAndValidateMetadata(SpringMvcContract.java:133)
at feign.Contract$BaseContract.parseAndValidatateMetadata(Contract.java:64)
at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:146)
at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:53)
//Feign接口方法调用
Request.Options options =new Request.Options(60 * 1000, 60 * 1000);
feignXXXService.getSignFile(options,param);
//解决方案,如下:
@RequestMapping(value="flow/getSignFile", method= RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Object getSignFile(@RequestParam(required = false,name = "options") Request.Options options,@RequestBody Map<String, Object> param);
//调用时报错:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class feign.Request$Options and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: feign.Request$Options[0])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) ~[jackson-databind-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:404) ~[jackson-databind-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) ~[jackson-databind-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33) ~[jackson-databind-2.10.5.jar:2.10.5]
at com.fasterxml.jackson.databind.ser.std.ObjectArraySerializer.serializeContents(ObjectArraySerializer.java:252) ~[jackson-databind-2.10.5.jar:2.10.5]
//解决方案,如下:
@RequestMapping(value="flow/getSignFile", method= RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Object getSignFile(@RequestHeader(required = false,name = "options") Request.Options options,@RequestBody Map<String, Object> param);
更多推荐
已为社区贡献2条内容
所有评论(0)