为JBoss 7.1中的几个JMS队列配置相同的死信队列

时间:2014-12-29 16:35:13

标签: jms jboss7.x dead-letter

我在JBoss 7.1上运行了一个java应用程序。它使用了20多个JMS队列。

我设置JMS队列的配置:

<jms-queue name="MX.EQ.DT.MT.OUT">
   <entry name="queue/MX.EQ.DT.MT.OUT"/>
   <entry name="java:jboss/exported/jms/queue/MX.EQ.DT.MT.OUT"/>
</jms-queue>

<jms-queue name="MX.EQ.DS.XML.OUT">
   <entry name="queue/MX.EQ.DS.XML.OUT"/>
   <entry name="java:jboss/exported/jms/queue/MX.EQ.DS.XML.OUT"/>
</jms-queue>

现在,我想为上面两个队列配置死信队列。我必须使用什么价值进行比赛?

我无法使用#,因为它适用于所有JMS队列,但我只想要这两个。

<address-setting match="jms.queue.MX.EQ.*.*.OUT">
   <dead-letter-address>jms.queue.DLQ</dead-letter-address>
   <expiry-address>jms.queue.ExpiryQueue</expiry-address>
   <redelivery-delay>0</redelivery-delay>
   <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>

无论如何还要将消息从死信队列推回到始发队列?

我正在使用大黄蜂队列版本2.2.13,并希望将通配符用作MX.EQ.*.*.OUT。 如果我在字符之间放置*#,则服务器在引导期间会抛出异常。

1 个答案:

答案 0 :(得分:2)

根据Understanding the HornetQ Wildcard Syntax

  

HornetQ通配符表达式包含由。分隔的单词   字符'.'(句号)。

     

特殊字符'#''*'也具有特殊含义   可以代替一个词。
  字符'#'表示匹配零个或多个单词的任何序列&#39;   字符'*'表示匹配一个单词&#39;。

     

因此通配符'news.europe.#'将匹配'news.europe',   'news.europe.sport''news.europe.politics'和。{   'news.europe.politics.regional'但不匹配'news.usa',   'news.usa.sport''entertainment'

     

通配符'news.*'将与'news.europe'匹配,但不匹配   'news.europe.sport'
  通配符'news.*.sport'将匹配'news.europe.sport'和   还'news.usa.sport',但不是'news.europe.politics'

在您的配置中,您可以使用wilcard *,但在JBoss 7.1.1中,当您放置一个带有字符*的值时,配置解析器会抛出异常。

错误类似于:

JBAS015956: Caught exception during boot: org.jboss.as.controller.PathElement$OperationClientIllegalArgumentException: JBAS014719: Invalid value specification

在值中使用空格时会出现同样的问题,此问题描述于: Logger category cannot have spaces

现在有一个选项是JBoss 7.1.2或更高版本的更新,或者为队列名称创建不同的命名法,例如:

<jms-queue name="group1.q1">
    <entry name="queue/group1.q1"/>
    <entry name="java:jboss/exported/jms/queue/group1.q1"/>
</jms-queue>
<jms-queue name="group1.q2">
    <entry name="queue/group1.q2"/>
    <entry name="java:jboss/exported/jms/queue/group1.q2"/>
</jms-queue>

address-setting

<address-setting match="group1.#">
    <dead-letter-address>jms.queue.DLQ</dead-letter-address>
    <expiry-address>jms.queue.ExpiryQueue</expiry-address>
    <redelivery-delay>0</redelivery-delay>
    <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>

wilcard #只能在比赛结束时使用。