Доступ к статистике клиента ActiveMQ Classic JMSJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Доступ к статистике клиента ActiveMQ Classic JMS

Сообщение Anonymous »

У меня есть приложение, которое использует org.apache.activemq:activemq-client:6.1.3 для взаимодействия с брокером ActiveMQ Classic. Я хочу предоставить метрики производителя и потребителя (например, количество отправленных и полученных байтов), собранные клиентом, в Micrometer, а затем в Grafana.
Я могу найти различную статистику, просматривая через объекты в отладчике, но я не могу найти способ запросить эту статистику через классы реализации JMS 2.0 (например, ActiveMQProducer, который реализует JMSProducer). Например, при использовании отражения это работает:

Код: Выделить всё

 public static void instrumentProducer(JMSProducer producer) {
if (!(producer instanceof ActiveMQProducer amqProducer)) {
throw new IllegalArgumentException("Expected an instance of ActiveMQProducer, but got: " + producer.getClass());
}

/* Is there a way to do this without reflection? */
var field = Arrays.stream(ActiveMQProducer.class.getDeclaredFields())
.filter(f -> ActiveMQMessageProducer.class.isAssignableFrom(f.getType()))
.findFirst()
.orElseThrow(() -> new NoSuchElementException("Could not find ActiveMQMessageProducer field to scrape metrics from"));

try {
field.trySetAccessible();
var messageProducer = (ActiveMQMessageProducer) field.get(amqProducer);
messageProducer.getStats().setEnabled(true);
var messageCount = messageProducer.getProducerStats().getMessageCount();

// Ideally this should be a counter, but I'll figure that out.
Gauge.builder("activemq.producer.message.count", messageCount::getCount)
.baseUnit(messageCount.getUnit())
.description(messageCount.getDescription())
.register(globalRegistry);
} catch (IllegalAccessException e) {
throw new RuntimeException("Unable to instrument JMSProducer", e);
}
}
Но это сложно и может сломаться, если реализация изменится.
Есть ли способ получить доступ к этой статистике без использования отражения или есть ли способ библиотека, которая может сделать это за меня, чтобы моей команде не приходилось поддерживать этот хрупкий, неочевидный код?
Наше приложение построено на Quarkus (мы намеренно не используем smallrye-messaging) в Java 17.

Подробнее здесь: https://stackoverflow.com/questions/790 ... statistics
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»