带有server.contextPath的Spring Boot设置与通过Eureka Server的hystrix.stream的URL

时间:2015-02-12 07:21:00

标签: spring-cloud turbine hystrix netflix-eureka

我有运行Turbine实例的Eureka Server和一些连接到它的发现客户端。一切正常,但如果我注册了server.contextPath设置的发现客户端,则InstanceMonitor无法识别它,并且Turbine流无法合并其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)

它尝试从http://user-service:8887/hystrix.stream获取hystrix流,其中包含sever.contextPath的正确URL应为http://user-service:8887/uaa/hystrix.stream

该客户的application.yml包含:

server:
  port: 8887
  contextPath: /uaa

security:
  ignored: /css/**,/js/**,/favicon.ico,/webjars/**
  basic:
    enabled: false

我的问题是:我应该向此用户服务发现客户端添加一些其他配置选项,以注册正确的hystrix.stream网址吗?

我还没有深入研究,如果在回答这个问题之前发现了什么,我会告诉你。

当前解决方案

使用server.contextPathmanagement.context-path时存在一个问题。当两者都设置好后,涡轮流将在${HOST_URL}/${server.contextPath}/${management.context-path}/hystrix.stream上提供。在这种情况下,我不得不使用server.contextPath(我用控制器@RequestMapping中的前缀替换它)。

现在,当您使用management.context-path时,您的hystrix.stream将从使用它作为前缀的URL提供。在这种情况下,你必须遵循斯宾塞的建议并设置

turbine.instanceUrlSuffix=/{PUT_YOUR_MANAGEMENT_CONTEXT_PATH_HERE}/hystrix.stream

当然,management.context-path必须为所有Discovery客户端设置相同的值 - 可以使用Spring Cloud Config轻松完成http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html

1 个答案:

答案 0 :(得分:3)

您可以设置turbine.instanceUrlSuffix.<CLUSTERNAME>=/uaa/hystrix.stream。其中<CLUSTERNAME>turbine.aggregator.clusterConfig中设置的值。 Turbine 1 wiki的所有配置选项都有效。当Spring Cloud Netflix Turbine添加eureka的端口时,您不需要将端口添加到后缀中。