Я использую @HystrixCommand для упаковки RPC , если не использовать Hystrix, он будет работать нормально. Этот RPC не является микросервисом, а является нормальным http
@Override
@HystrixCommand(commandProperties = {@HystrixProperty( name ="execution.isolation.thread.timeoutInMilliseconds",value="5000")},fallbackMethod="doAccountQueryFallback")
public CBIBAcctQueryResponseVO doAccountQuery(@RequestBody CBIBAcctQueryRequestVO cbibAcctQueryRequestVO) {
//initialize message
// ....
try {
responseMessage = (AcctTypeInqResponse) HTTPUtil.sendHttp("http://********", inqRequest, *****.class);
} catch (RuntimeException e) {
//...
}
logger.debug("success");// 1
return cbibAcctQueryResponseVO;
}
public CBIBAcctQueryResponseVO doAccountQueryFallback(@RequestBody CBIBAcctQueryRequestVO cbibAcctQueryRequestVO){
//....
}
информация об ошибке типа:
feign.RetryableException: Read timed out executing POST http://****/doAccountQuery
at feign.FeignException.errorExecuting(FeignException.java:67)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
at com.sun.proxy.$Proxy153.doAccountQuery(Unknown Source)
...
...
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
Я изменяю значение свойств @HystrixCommand. Хотя я установил долгое время, он также покажет это исключение, сделайте // 1 и не вызывайте метод отката.
Когда я устанавливаю 100 ,, он показывает это исключение, делает // 1 и вызывает метод возврата.
Я подозреваю, что это отправлять несколько раз?
Когда я устанавливаю 1, он не показывает это исключение и не вызывает метод отката.
это на самом деле ожидается.
doAccountQuery является mircoservice, и в doAccountQuery существует обычный http-запрос. Я хочу упаковать этот обычный http-запрос только с Hystrix (не используйте feign). Но как только я добавлю @ @HystrixCommand в doAccountQuery. Микросервис doAccountQuery сам по себе будет отключен, но он также вернет результат (ретрансляция? только при первой передаче). тайм-аут? Я не знаю)
1 также попробуйте
ribbon:
ReadTimeout: 60000
ConnectTimeout: 60000
но бесполезно
Кроме того, иногда исключение становится
тайм-аут подключения и не делать // 1 и даже не вызывать резервный метод!
Я хочу предложить отладку, спасибо!