Тайм-аут чтения при использовании Hystrix на RPC - PullRequest
0 голосов
/ 18 января 2019

Я использую @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 и даже не вызывать резервный метод!

Я хочу предложить отладку, спасибо!

...