我在我的网关上使用JHipster版本4.6.2。我有一个JHipster注册表和两个相同微服务的实例。在JHipster注册表中,我可以看到网关和两个微服务实例都已正确注册。我可以配置,查看健康状况等。总之,一切正常。
微服务是使用较新的JHipster版本(4.11.1)创建的。网关和微服务似乎都很好地合作。例如,网关上的默认(生成的)用户界面能够从微服务获取数据(实体)。在网关上我只使用Jhipster为我生成的逻辑从微服务中获取数据。我可以在日志中看到调用被路由到两个微服务实例。
我面临的问题是,当我关闭一个微服务实例时,网关仍然有时会尝试将服务调用路由到已经关闭的微服务实例。当然,经过一段时间后,所有服务调用都只是正确地路由到正确/正在运行的微服务实例。但有时在关闭一个微服务实例后,呼叫可能会被路由到错误的"实例
我预计,如果对第一个微服务实例的服务调用失败,像ribbon,zuul和eureka这样的组件会自动尝试其他微服务实例。我的期望是否正确?应该是Jhipster"微服务平台"自动重试对其他已注册的微服务实例的服务调用?
如果默认情况下不支持重试,我该怎么做才能实现?
答案 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/3323和https://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)
}
})
})