Метрики Netflix Hystrix не отображаются на /hystrix.stream - PullRequest
0 голосов
/ 20 декабря 2018

Я оцениваю Netflix Hystrix как улучшение для проекта, над которым я сейчас работаю, который основан на Java OSGi (я использую Apache felix в качестве среды выполнения OSGi).На данный момент я смог:

  • Вставить ядро ​​Hystrix в один существующий пакет, который действует как соединитель для внешней системы и обернуть один из ее сервисов HystrixCommand.Все работает как положено, я вижу, как работает логика Hystrix.Также с помощью журналов DEBUG я проверил, что все зарегистрировано правильно (com.netflix.hystrix = DEBUG).

  • Создайте новый пакет, который отвечает за регистрацию сервлета hystrix.stream,В основном я получил HttpService (org.osgi.service.http.HttpService), поступающий из среды выполнения OSGi, и зарегистрировал на нем сервлет.Все выглядит нормально, сервлет зарегистрирован правильно и виден в $ {myEndpoint} /hystrix.stream.Таким образом:

    httpService.registerServlet ("/ hystrix.stream/*", новый HystrixMetricsStreamServlet (), null, myHttpCtx);

Проблема в том, что я не вижу данные объекты, помещенные в поток.Видны только обновления ping , даже если в то же время я подчеркиваю, что HistryxCommand деформирует службу с помощью теста Jmeter / Postman.Учитывая, что я не замечаю ошибок, я думаю о том, что издатель и читатель привыкли к различным потокам.Может ли кто-нибудь помочь мне понять немного больше внутренних особенностей Hystrix и устранить неполадки в моем сценарии?Я попытался просмотреть источники Hystrix, но, если честно, это пока не помогло.

Ниже зависимостей я использую

<dependencies>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-core</artifactId>
            <version>1.5.12</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-metrics-event-stream</artifactId>
            <version>1.5.12</version>
        </dependency>
    </dependencies>

Спасибо

1 Ответ

0 голосов
/ 23 декабря 2018

Я заметил, что создание экземпляров HystrixCommand классов и HystrixMetricsStreamServlet из того же OSGi-пакета решило мои проблемы.

Так что я думаю, что проблема была вызвана:

  • использованием синглетонов во внутренних классах Hystrix;
  • тем фактом, что в OSGi каждый пакет имеет свой собственный загрузчик классов, с его плюсами и минусами .

Глядя на исходный код Hystrix, я понимаю внутренний процесс:

Синглтон HystrixCommandMetrics используется классами AsbtractCommand для проталкиванияметрики событий.HystrixMomricsStreamServlet (через класс HystrixDashboardStream) также ссылается на синглтон HystrixCommandMetrics для ссылки на те же метрики событий.Так что, если HystrixMetricsStreamServlet и AbstractCommand (s) не используют одни и те же загрузчики классов, они читают и загружают из / на разные объекты.

Поскольку я планирую использовать Hystrix для обертывания разных систем, следовательно, в разных пакетах OSGi, чистое решение, которое я нашел на данный момент, состоит в том, чтобы упаковать все необходимые библиотеки Hystrix в одну com.mycompany.osgi.hystrix и сделатьон доступен в среде выполнения OSGi как отдельный плагин.

...