Монторинг ActiveMQ с использованием консоли JMX -JConsole

#jms #activemq #spring-jms

#jms #activemq #spring-jms

Вопрос:

как просмотреть сообщение, которое было использовано потребителем в ActiveMQ JMS, используя консоль JMX -JConsole?

Ответ №1:

введите описание изображения здесь для этого вы можете просматривать темы ActiveMQ.Advisory.MessageConsumed.Topic.YourTopicName или искать очередь ActiveMQ.Advisory.MessageConsumed.Queue.YourQueueName с помощью jconsole или VisualVM, это возможно с помощью консультативного сообщения http://activemq.apache.org/advisory-message.html и вам нужно включить это в конфигурации брокера, добавив это :

     <destinationPolicy>
        <policyMap>
          <policyEntries>
            <!--  http://activemq.apache.org/advisory-message.html -->
            <policyEntry topic=">" advisoryForConsumed="true" />
            <policyEntry queue=">" advisoryForConsumed="true" />
          </policyEntries>
        </policyMap>
    </destinationPolicy>
  

код для просмотра рекомендательных сообщений.

         Destination advisoryDestination = AdvisorySupport.getMessageDeliveredAdvisoryTopic(destination);
        Destination advisoryDestination = AdvisorySupport.getMessageDiscardedAdvisoryTopic(destination);
        Destination advisoryDestination = AdvisorySupport.getMessageConsumedAdvisoryTopic(destination);
        MessageConsumer consumer = session.createConsumer(advisoryDestination);
        consumer.setMessageListener(this);

        public void onMessage(Message msg){
            String messageId =   msg.getJMSMessageID();
            String orignalMessageId =   msg.getStringProperty(org.apache.activemq.advisory.AdvisorySupport.MSG_PROPERTY_MESSAGE_ID);
            if (msg instanceof ActiveMQMessage){
                try {
                     ActiveMQMessage aMsg =  (ActiveMQMessage)msg;
                     ConsumerInfo consumerInfo = (ConsumerInfo) aMsg.getDataStructure();
                } catch (JMSException e) {
                    log.error("Failed to process message: "   msg);
                }
            }
        }
  

Комментарии:

1. привет, Хассен, не могли бы вы сообщить мне, в каком поле будет отображаться сообщение, которое было использовано потребителем, и идентификатор сообщения? И какое сообщение не было использовано потребителем

2. проблема в том, что ActiveMQ.Advisory.MessageConsumed это тема, и если нет подписок, сообщения будут потеряны, решением, если вам нужно просмотреть их с помощью jconsole, является дублирование сообщений из этой темы в пользовательскую очередь с перехватчиками camel или AMQ, или вы используете некоторый код для их просмотра. чтобы увидеть отброшенные сообщения, на которые вы можете подписаться ActiveMQ.Advisory.MessageDiscarded.Topic . я обновляю ответ с помощью некоторого кода.

3. Можем ли мы просматривать данные очереди, т.Е. Полезную нагрузку, отправленную потребителю производителем на 1 сервере, и полезную нагрузку, потребляемую потребителем на другом сервере?

4. вы имеете в виду под серверами 2 ActiveMQ на разных хостах?

5. да, 2 ActiveMQ на разных хостах, 1 производит, а другой использует механизм очереди