#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 производит, а другой использует механизм очереди