在 Jboss 7 中读取来自 DLQ 的消息
Read messages from DLQ in Jboss 7
我在 JBOSS 7.1.
中配置了以下两个 jms 队列
<jms-queue name="APP.QUEUE1">
<entry name="queue/APP.QUEUE1"/>
<entry name="java:jboss/exported/jms/queue/APP.QUEUE1"/>
</jms-queue>
<jms-queue name="APP.QUEUE2">
<entry name="queue/APP.QUEUE2"/>
<entry name="java:jboss/exported/jms/queue/APP.QUEUE2"/>
</jms-queue>
在消费消息时,如果出现问题,消息将进入配置如下的死信队列。
<address-setting match="jms.queue.APP#">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<max-delivery-attempts>5</max-delivery-attempts>
<max-size-bytes>10485760</max-size-bytes>
<address-full-policy>BLOCK</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
所以我已经成功将消息发送到 DLQ。
现在我已经写好了Dead letter queue的consumer,这样解决问题后就可以传回消息了。
消费消息的代码如下
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueBrowser browser = session.createBrowser(queue);
Queue queue1=browser.getQueue();
Enumeration messageEnum = browser.getEnumeration();
while (messageEnum.hasMoreElements()) {
TextMessage message = (TextMessage) messageEnum.nextElement();
}
从短信中,是否有机会获取源队列(APP.QUEUE1 或APP.QUEUE2),以便我可以将相同的短信传回而不必担心消息属性。
请让我知道我的方法是否正确,适用于更好的解决方案。
找到了这个问题的答案。
我们有 属性 如下。
message.getStringProperty("_HQ_ORIG_ADDRESS");
这个属性给原始地址。
我在 JBOSS 7.1.
中配置了以下两个 jms 队列<jms-queue name="APP.QUEUE1">
<entry name="queue/APP.QUEUE1"/>
<entry name="java:jboss/exported/jms/queue/APP.QUEUE1"/>
</jms-queue>
<jms-queue name="APP.QUEUE2">
<entry name="queue/APP.QUEUE2"/>
<entry name="java:jboss/exported/jms/queue/APP.QUEUE2"/>
</jms-queue>
在消费消息时,如果出现问题,消息将进入配置如下的死信队列。
<address-setting match="jms.queue.APP#">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<max-delivery-attempts>5</max-delivery-attempts>
<max-size-bytes>10485760</max-size-bytes>
<address-full-policy>BLOCK</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
所以我已经成功将消息发送到 DLQ。
现在我已经写好了Dead letter queue的consumer,这样解决问题后就可以传回消息了。
消费消息的代码如下
QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueBrowser browser = session.createBrowser(queue);
Queue queue1=browser.getQueue();
Enumeration messageEnum = browser.getEnumeration();
while (messageEnum.hasMoreElements()) {
TextMessage message = (TextMessage) messageEnum.nextElement();
}
从短信中,是否有机会获取源队列(APP.QUEUE1 或APP.QUEUE2),以便我可以将相同的短信传回而不必担心消息属性。
请让我知道我的方法是否正确,适用于更好的解决方案。
找到了这个问题的答案。 我们有 属性 如下。 message.getStringProperty("_HQ_ORIG_ADDRESS"); 这个属性给原始地址。