Jhipster是否会重试服务电话

时间:2017-12-15 16:59:08

标签: jhipster netflix-eureka netflix-zuul netflix-ribbon

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

感谢您对Gael的回应。我尝试从您提供的链接进行配置,但这并没有完全解决我的问题。

当设法摆脱原始异常时(" com.netflix.client.ClientException:null")我遇到了下一个问题("引起:com.netflix.client.ClientException :下次服务器上的重试次数超过最多2次重试,同时调用:192.168.1.4:8082")。 我需要调整MaxAutoRetriesNextServer(参见https://github.com/spring-cloud/spring-cloud-netflix/issues/2052)。 这让我更进了一步,但仍然得到了hystrix异常("引起:com.netflix.hystrix.exception.HystrixRuntimeException:myservice timed-out,没有后备可用。")。

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

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

$('#input-file').change(function() {

      var url = '/back-end-url';
      var form_data = new FormData();
      var xhr = new XMLHttpRequest();

      $.each(this.files, function (key, value) {
          form_data.append('file', value)
      })

      xhr.open('POST', url, true)
      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
      xhr.send(form_data)

      xhr.onreadystatechange(function() {
          if(xhr.readyState == XMLHttpRequest.DONE) {
               var res = JSON.parse(xhr.responseText)
          }
      })

})