我有运行 Turbine 实例的 Eureka Server 以及连接到它的一些发现客户端。一切正常,但如果我注册一个发现客户端server.contextPath
设置后,它没有被识别InstanceMonitor
涡轮流无法结合其hystrix.stream
.
这是 Eureka/Turbine 服务器日志中的样子:
2015-02-12 06:56:23.265 INFO 1 --- [ Timer-0] c.n.t.discovery.InstanceObservable : Hosts up:3, hosts down: 0
2015-02-12 06:56:23.266 INFO 1 --- [ Timer-0] c.n.t.monitor.instance.InstanceMonitor : Url for host: http://user-service:8887/hystrix.stream default
2015-02-12 06:56:23.268 ERROR 1 --- [InstanceMonitor] c.n.t.monitor.instance.InstanceMonitor : Could not initiate connection to host, giving up: []
2015-02-12 06:56:23.269 WARN 1 --- [InstanceMonitor] c.n.t.monitor.instance.InstanceMonitor : Stopping InstanceMonitor for: user-service default
com.netflix.turbine.monitor.instance.InstanceMonitor$MisconfiguredHostException: []
at com.netflix.turbine.monitor.instance.InstanceMonitor.init(InstanceMonitor.java:318)
at com.netflix.turbine.monitor.instance.InstanceMonitor.access$100(InstanceMonitor.java:103)
at com.netflix.turbine.monitor.instance.InstanceMonitor$2.call(InstanceMonitor.java:235)
at com.netflix.turbine.monitor.instance.InstanceMonitor$2.call(InstanceMonitor.java:229)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
它尝试从中获取 hystrix 流http://user-service:8887/hystrix.stream
其中包含 sever.contextPath 的正确 URL 应该是http://user-service:8887/uaa/hystrix.stream
The application.yml
该客户端包含:
server:
port: 8887
contextPath: /uaa
security:
ignored: /css/**,/js/**,/favicon.ico,/webjars/**
basic:
enabled: false
我的问题是:我是否应该向此用户服务发现客户端添加一些额外的配置选项以注册正确的 hystrix.stream URL 位置?
我还没有深入研究这个问题,如果在回答这个问题之前发现了一些东西,我会让你知道。
目前的解决方案
使用的时候有一个问题server.contextPath
and management.context-path
。当两者都设置好后,涡轮机流将被提供${HOST_URL}/${server.contextPath}/${management.context-path}/hystrix.stream
。在那种情况下我不得不放弃使用server.contextPath
(我将其替换为控制器中的前缀@RequestMapping
).
现在,当您使用management.context-path
,那么您的 hystrix.stream 将从使用它作为前缀的 URL 提供服务。在这种情况下,你必须遵循 Spencer 的建议并设置
turbine.instanceUrlSuffix=/{PUT_YOUR_MANAGEMENT_CONTEXT_PATH_HERE}/hystrix.stream
当然还有这个management.context-path
必须为所有发现客户端设置相同的值 - 这可以使用 Spring Cloud Config 轻松完成http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html