2016-09-22 4 views
0

Iam создает приложение на activemq, где iam отправляет сообщение от производителя, где мой режим доставки NON_PERSISTENT (iam не имеет отношения к режиму доставки PERSISTENT, и я знаю он будет сохранен в DLQ, который не является моим дизайном) и установил время для сообщения, используя файл production.setTimeToLive (2000). Поскольку функциональность говорит, что сообщение истечет через 2 секунды.Истерируйте по ненастоящим сообщениям activemq в ActiveMQ.Advisory.Expired.Queue

Я вижу, что старые сообщения помещён в ActiveMQ.Advisory.Expired.Queue в теме секции ActiveMQ консоли администратора т.е. http://localhost:8161/admin/topics.jsp.

Мой вопрос, как я итерацию по ActiveMQ.Advisory.Expired.Queue так, что я могу получить доступ к MESSAGEID в выдыхаемом примере message.Any кода будет большой.

ответ

2

Подписка на адрес ActiveMQ.Advisory.Expired.Queue похож на любую тему и возвращает ActiveMQMessage. Есть объекты DataStructure (ConsumerInfo, ProducerInfo, ConnectionInfo ...), которые можно получить с помощью метода getDataStructure ActiveMQMessage.

док http://activemq.apache.org/advisory-message.html

пример:

Destination advisoryDestination = AdvisorySupport.getExpiredQueueMessageAdvisoryTopic(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; 
      ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure(); 
     } catch (JMSException e) { 
      log.error("Failed to process message: " + msg); 
     } 
    } 
} 
+0

Superb понимают концепцию и работает как шарм !!!! –

+0

@ Hassen Bennour Используя приведенный выше код, я могу получать сообщения, срок действия которых истекает после запуска слушателя сообщения. Я не могу получить ранее истекшие сообщения, которые находятся в ** DLQ **. Как я могу повторить и получить сообщение с истекшим временем? Для моей озабоченности мне тоже нужны эти сообщения. –

+0

вы можете попытаться добавить эту политику к своим темам, чтобы использовать очередь вместо темы в качестве DLQ, так как это сообщение не будет потеряно, если нет потребителя онлайн, ключ ** useQueueForTopicMessages ** ' \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t ' –

Смежные вопросы