訂閱目標ActiveMQ.Advisory.Expired.Queue就像任何主題,它返回一個ActiveMQMessage。 可以通過ActiveMQMessage的getDataStructure方法檢索DataStructure對象(ConsumerInfo,ProducerInfo,ConnectionInfo ...)。
DOC 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);
}
}
}
精湛理解的概念和工程就像一個魅力!!!! –
@Hassen Bennour通過使用上面的代碼,我可以接收消息偵聽器啓動後過期的消息。我無法收到駐留在** DLQ **中的以前過期的消息。我如何迭代並獲取以前過期的消息?我擔心我也需要這些消息。 –
您可以嘗試將此策略添加到您的主題,以使用隊列而不是主題作爲DLQ,就像這樣,如果沒有消費者在線,消息不會丟失,關鍵是** useQueueForTopicMessages ** ' \t \t \t \t 」> \t \t \t \t \t \t \t \t \t \t deadLetterStrategy> \t \t policyEntry> \t policyEntries> \t destinationPolicy>' –