Spring Cloud Turbine – Не удается обработать несколько клиентов?

У меня возникли проблемы с запуском Turbine в Spring Cloud. Короче говоря, я не могу определить, как настроить его для объединения цепей из более чем одного приложения одновременно.

У меня есть 6 отдельных сервисов, сервер eureka и сервер turbo, работающий в автономном режиме. Я вижу на своем сервере Eureka, что все службы зарегистрированы, включая турбину. Мой турбинный сервер запущен и работает, и я без проблем вижу его страницу /hystrix. Но когда я пытаюсь использовать его для проверки Turbine.stream, я вижу только ПЕРВЫЙ сервер, указанный в Turbine.appConfig, остальные игнорируются.

Это application.yml моего сервера Turbine или, по крайней мере, соответствующие части:

---
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 на своем экземпляре турбины, запрашивая turbo.stream, ТОЛЬКО автоматические выключатели, перечисленные в выходных данных, предназначены для первой службы, указанной в appConfig, в данном случае службы «предложения». Любопытно, что если я изменю порядок этих сервисов и поставлю первым другой (например, «существительное»), я увижу схемы только для ЭТОГО сервиса. Отображается только первая служба в списке.

Я признаю, что немного запутался в некоторых терминах, таких как потоки, кластеры и т. д., поэтому я мог упустить здесь некоторую базовую концепцию, но я понимаю, что Turbine может обрабатывать потоки из более чем одного сервиса и объединять их. в одном дисплее. Предложения будут оценены.


person Ken Krueger    schedule 29.04.2015    source источник
comment
какой URL-адрес вы используете в панели управления hystrix?   -  person spencergibb    schedule 30.04.2015
comment
Привет @spencergibb, спасибо за ответ. Я использую localhost:8030/hystrix для доступа к турбине и localhost:8030/turbine.stream на панели управления hystrix. Я также пробовал имя моей машины вместо localhost, тот же результат.   -  person Ken Krueger    schedule 01.05.2015
comment
Вам нужно поставить /turbine.stream?cluster=<clustername>   -  person spencergibb    schedule 01.05.2015
comment
Спасибо, Спенсер. Какое значение используется для имени кластера? Я пытался использовать кластер по умолчанию. Независимо от того, использую ли я /turbine.stream или /turbine.stream?cluster=default, я получаю тот же результат, только ПЕРВЫЙ клиент, указанный в appConfig, появляется на панели управления. Как сделать, чтобы они все отображались?   -  person Ken Krueger    schedule 03.05.2015
comment
См. документацию: projects.spring.io /spring-cloud/docs/1.0.1/ В вашем случае turbine.aggregator.clusterConfig=SENTENCE,SUBJECT,VERB,ARTICLE,ADJECTIVE,NOUN и <clustername> будут одним из этих значений. Я бы не стал использовать clusterNameExpression.   -  person spencergibb    schedule 04.05.2015
comment
Спасибо за помощь, Спенсер. Я несколько раз перечитывал этот раздел справочника за последние несколько дней. Для уточнения: я пытаюсь использовать турбину для консолидированного мониторинга нескольких сервисов, а не одного сервиса. По вашему предложению я жестко настроил все идентификаторы сервисов дляturbo.aggregator.clusterConfig и повторил это в свойствахturbo.appConfig. И это позволяет мне успешно получать выходные данные для одного конкретного кластера за раз. Но я ищу сводную панель всех сервисов, желательно без жесткого кодирования.   -  person Ken Krueger    schedule 06.05.2015
comment
Кроме того, что касается избегания выражения clusterNameExpression, можете ли вы объяснить, почему? Кажется, он предлагает именно то, что мне нужно. Поток в stackoverflow.com/questions/28365202/ указывает, что на самом деле это должно быть clusterNameExpression: new String("default"). Путем отладки кода в o.s.c.n.turbine.EurekaInstanceDiscovery я убедился, что это действительно назначает все экземпляры кластеру «по умолчанию». Но и по сей день на мониторе появляются прерыватели только одного приложения.   -  person Ken Krueger    schedule 06.05.2015


Ответы (1)


У меня недостаточно репутации, чтобы комментировать, поэтому я должен написать это в ответ :)

У меня была точно такая же проблема:

Есть два сервиса "test-service" и "other-service", каждый со своим рабочим hystrix-stream и есть одно Turbine-Application, которое настроено так:

    turbine:
        clusterNameExpression: new String("default")
        appConfig: test-service,other-service

Все мои службы работают на моей локальной машине.

Результат: My Hystrix-Dashboard просто показывает метрики из "test-service".

Причина:

Создается впечатление, что 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
person Mike Boddin    schedule 11.06.2015
comment
Бинго! Имя хоста различает несколько сервисов. Я думаю, вы должны получить больше очков опыта, Майк, но я рад, что вы опубликовали это как ответ. Единственное, что я заметил, это то, что даже если у вас разные имена хостов, если метод с автоматическим выключателем имеет одинаковое имя, они агрегируются вместе. - person Ken Krueger; 15.06.2015