首页 文章

Jhipster是否会重试服务电话

提问于
浏览
0

我在我的网关上使用JHipster版本4.6.2 . 我有一个JHipster注册表和两个相同微服务的实例 . 在JHipster注册表中,我可以看到网关和两个微服务实例都已正确注册 . 我可以配置,查看 Health 状况等 . 总之,一切正常 .

微服务是使用较新的JHipster版本(4.11.1)创建的 . 网关和微服务似乎都很好地合作 . 例如,网关上的默认(生成的)用户界面能够从微服务获取数据(实体) . 在网关上我只使用Jhipster为我生成的逻辑从微服务中获取数据 . 我可以在日志中看到调用被路由到两个微服务实例 .

我面临的问题是,当我关闭一个微服务实例时,网关仍然有时会尝试将服务调用路由到已经关闭的微服务实例 . 当然,经过一段时间后,所有服务调用都只是正确地路由到正确/正在运行的微服务实例 . 但有时在关闭一个微服务实例后,调用可能会被路由到“错误”实例 .

我预计如果对第一个微服务实例的服务调用失败,像ribbon,zuul和eureka这样的组件会自动尝试其他微服务实例 . 我的期望是否正确? Jhipster“微服务平台”应该自动重试其他注册微服务实例的服务调用吗?

如果默认情况下不支持重试,我该怎么做才能实现?

1 回答

  • 1

    谢谢你的回应盖尔 . 我尝试从您提供的链接进行配置,但这并没有完全解决我的问题 .

    当设法摆脱原始异常("com.netflix.client.ClientException: null")时,我遇到了下一个问题("Caused by: com.netflix.client.ClientException: Number of retries on next server exceeded max 2 retries, while making a call for: 192.168.1.4:8082") . 我需要调整MaxAutoRetriesNextServer(参见https://github.com/spring-cloud/spring-cloud-netflix/issues/2052) . 这让我更进一步,但仍然得到了hystrix例外("Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: myservice timed-out and no fallback available.") .

    最后借助这两个链接(https://github.com/jhipster/generator-jhipster/issues/3323https://github.com/spring-cloud/spring-cloud-netflix/issues/321),我设法进行了配置,在我的测试中提供了100%的可用性(到目前为止) .

    这是对我有用的配置 . 我并不完全了解所有这些设置背后的所有细节,因此如果您发现这些设置存在任何不一致之处或者您有改进建议,请提出它们 . 谢谢!

    zuul:
        routes:
            myservice:
                retryable: true
        host:
            connect-timeout-millis: 5000
            socket-timeout-millis: 20000            
    ribbon:
        MaxAutoRetries: 1
        MaxAutoRetriesNextServer: 5
        OkToRetryOnAllOperations: true
        ReadTimeout: 2500
        restclient:
            enabled: true
    hystrix:
        command:
            default:
                execution:
                    isolation:
                        thread:
                            timeoutInMilliseconds: 20000
    

相关问题