Nano Hash - криптовалюты, майнинг, программирование

Подпишитесь на канал Spring Metrics

Таким образом, согласно документам Spring, он будет публиковать метрики на конечной точке REST и канале сообщений.

Конечная точка REST работает нормально, так как я получаю ожидаемый результат. Однако я хотел бы обрабатывать каждое изменение в показателях. Таким образом, он говорит, что по умолчанию будет публиковать сообщения в канале под названием «metricsChannel».

Я попытался создать следующий класс, который будет слушать этот канал, но, похоже, он не срабатывает. Все остальное осталось по умолчанию для приложения Spring Boot.

package services.core;

import org.springframework.stereotype.Service;
import org.springframework.integration.annotation.ServiceActivator;

@Service
public class MetricService {
    @ServiceActivator(inputChannel = "metricsChannel")
    public void handleMessage(org.springframework.messaging.Message<?> message) {
        System.out.println("Message [" + message.toString() + "] is received");
    }
}

  • Вы уверены, что Spring Boot видит ваш класс MetricService? Я имею в виду правильный пакет для @ComponentScan 14.04.2015
  • Да, потому что я протестировал использование обмена сообщениями JMS из метода Main, отправив сообщение именно этому классу (другой метод, который я удалил для этого примера) с теми же аннотациями, и это сработало. Так вы подразумеваете, что этот код должен был работать? 14.04.2015

Ответы:


1

Я только что проверил это и хорошо работает:

@Bean
@ServiceActivator(inputChannel = "metricsChannel")
public MessageHandler metricsHandler() {
    return System.out::println;
}

Я сделал это в нашем web-sockets примере на части server. Добавил это:

compile 'org.springframework.boot:spring-boot-starter-actuator'

к этому проекту Gradle config.

И я вижу это в консоли, когда запускаю приложение client:

GenericMessage [payload=Metric [name=gauge.response.time.star-star, value=26.0, timestamp=Tue Apr 14 16:03:53 EEST 2015], headers={metricName=gauge.response.time.star-star, id=08697a97-83c1-5000-f031-65f6797c0cd8, timestamp=1429016633672}]
GenericMessage [payload=Metric [name=counter.status.101.time.star-star, value=1, timestamp=Tue Apr 14 16:03:53 EEST 2015], headers={metricName=counter.status.101.time.star-star, id=8d070cb4-88e8-f5a7-6b83-6b27edf75bfc, timestamp=1429016633674}]

Но да: ваш код тоже хорош.

14.04.2015
  • Как опубликовать метрики SpringBoot Micrometer в metricsChannel или Stdout? 12.02.2019

  • 2

    Чтобы уточнить: мой код действительно работал, но для меня это было ошибкой.

    Цитата из документов Spring:

    Если jar «Spring Messaging» находится в вашем пути к классам, автоматически создается MessageChannel с именем metricsChannel (если он еще не существует). Все события обновления показателей дополнительно публикуются в виде «сообщений» на этом канале. Дополнительный анализ или действия могут быть предприняты клиентами, подписавшимися на этот канал.

    Таким образом, под «всеми событиями обновления метрик» я подумал, что системные метрики (использование памяти, загрузка процессора и т. д.) подпадают под эти события. На самом деле это не так, они просто публикуются всякий раз, когда меняются ваши пользовательские счетчики или, например, количество запросов для определенной конечной точки.

    Первоначально я ждал сообщения каждую секунду или около того после загрузки, но безрезультатно. В конечном итоге начал вызывать конечную точку метрик, и внезапно сообщения начали появляться в консоли/канале каждый раз, когда я вызывал ее.

    14.04.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..