Spring Cloud Turbine - 无法处理多个客户端?
Posted
技术标签:
【中文标题】Spring Cloud Turbine - 无法处理多个客户端?【英文标题】:Spring Cloud Turbine - Unable to handle multiple clients? 【发布时间】:2015-07-08 04:11:20 【问题描述】:我在让 Turbine 在 Spring Cloud 中工作时遇到了一些麻烦。简而言之,我无法确定如何将其配置为一次聚合来自多个应用程序的电路。
我有 6 个独立的服务,一个 eureka 服务器和一个以独立模式运行的涡轮服务器。我可以从我的 Eureka 服务器上看到所有服务都已注册,包括涡轮机。我的涡轮服务器已启动并正在运行,我可以毫无问题地看到它的 /hystrix 页面。但是当我尝试用它来检查turbo.stream时,我只看到turbo.appConfig中列出的FIRST服务器,其余的都被忽略了。
这是我的 Turbine 服务器的 application.yml,或者至少是相关部分:
---
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8010/eureka/
server:
port: 8030
info:
component: Turbine
turbine:
clusterNameExpression: new String(“default”)
appConfig: sentence,subject,verb,article,adjective,noun
management:
port: 8990
当我运行它并访问我的涡轮实例上的 hystrix 仪表板,请求涡轮流时,输出中列出的唯一断路器是 appConfig 中列出的第一个服务,在这种情况下是“句子”服务。奇怪的是,如果我重新排列这些服务的顺序并将另一个放在首位(如“名词”),我只会看到该服务的电路。仅显示列表中的第一个服务。
我承认对一些术语有些困惑,比如流、集群等,所以我可能在这里遗漏了一些基本概念,但我的理解是 Turbine 可以从多个服务中消化流并将它们聚合在一个显示中。建议将不胜感激。
【问题讨论】:
你在 hystrix 仪表板中使用的 url 是什么? 嗨@spencergibb,感谢您的回复。我使用localhost:8030/hystrix 访问涡轮机,并在hystrix 仪表板中使用localhost:8030/turbine.stream。我也试过我的机器名而不是 localhost,结果相同。 你需要把/turbine.stream?cluster=<clustername>
谢谢斯宾塞。集群名称使用什么值?我试图使用默认集群。无论我使用 /turbine.stream 还是 /turbine.stream?cluster=default 我都会得到相同的结果,只有 appConfig 中列出的 FIRST 客户端出现在仪表板中。如何让它们全部出现?
请参阅文档:projects.spring.io/spring-cloud/docs/1.0.1/… 在您的情况下,turbine.aggregator.clusterConfig=SENTENCE,SUBJECT,VERB,ARTICLE,ADJECTIVE,NOUN
和 <clustername>
将是这些值之一。我不会使用clusterNameExpression
。
【参考方案1】:
我没有足够的声誉来发表评论,所以我必须在答案中写下这个:)
我遇到了完全相同的问题:
有两个服务“test-service”和“other-service”,每个都有自己的工作 hystrix-stream 并且有一个 Turbine-Application,其配置如下:
turbine:
clusterNameExpression: new String("default")
appConfig: test-service,other-service
我所有的服务都在我的本地机器上运行。
结果是:我的 Hystrix-Dashboard 只显示来自“测试服务”的指标。
原因:
似乎,以所述方式配置的 Turbine-Client 在同一主机上运行时无法处理多个服务。
这里解释一下:
https://github.com/Netflix/Hystrix/issues/117#issuecomment-14262713
Turbine 维护所有这些实例的状态以保持与它们的持久连接,它确实依赖于“主机名”,并且 如果主机名相同,则不会实例化与该主机的新连接服务器(在不同的端口上)。
所以重点是,您的所有服务都必须使用不同的主机名注册。下面将介绍如何在本地计算机上执行此操作。
2015-06-12/2016-01-23 更新:本地测试的解决方法
更改您的主机文件:
# ...
127.0.0.1 localhost
127.0.0.1 localdomain1
127.0.0.1 localdomain2
# ...
127.0.0.1 localdomainx
然后将每个客户端的主机名设置为不同的域条目,如下所示:application.yml:
eureka:
instance:
hostname: localdomainx
【讨论】:
宾果游戏!主机名区分多个服务。我认为你应该获得更多的经验点迈克,但我很高兴你发布了这个作为答案。我注意到的唯一另一件事是,即使您有不同的主机名,如果带有断路器的方法具有相同的名称,它们也会聚合在一起。以上是关于Spring Cloud Turbine - 无法处理多个客户端?的主要内容,如果未能解决你的问题,请参考以下文章
Hystrix 和 Turbine 不适用于 Spring boot 2 和 Spring cloud Finchley.M8
spring cloud:hystrix-dashboard-turbine