使用 JMX 控制台 -jConsole 的 ActiveMQ 监控

ActiveMQ montoring using a JMX console -jConsole

如何使用 JMX 控制台 -jConsole 查看 ActiveMQ JMS 中消费者消费的消息?

为此,您可以使用 jconsole 或 visualVM 浏览主题 ActiveMQ.Advisory.MessageConsumed.Topic.YourTopicName 或队列 ActiveMQ.Advisory.MessageConsumed.Queue.YourQueueName,这可以通过 Advisory Message 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);
                }
            }
        }