【问题标题】:Configuring the same dead letter queue for several JMS queues in JBoss 7.1在 JBoss 7.1 中为多个 JMS 队列配置相同的死信队列
【发布时间】:2015-03-07 02:38:45
【问题描述】:

我有一个在 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>

还有没有办法将消息从死信队列推回原始队列?

我正在使用 hornet queue 版本 2.2.13,并希望将通配符用作 MX.EQ.*.*.OUT。 如果我将*# 放在字符之间,服务器会在启动过程中引发异常。

【问题讨论】:

    标签: jms jboss7.x dead-letter


    【解决方案1】:

    根据Understanding the HornetQ Wildcard Syntax

    HornetQ 通配符表达式包含由 字符'.'(句号)。

    特殊字符'#''*'也有特殊含义和 可以代替单词。
    字符'#' 表示“匹配任何零个或多个单词的序列”。
    字符'*' 表示“匹配单个单词”。

    所以通配符'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'

    在您的配置中,您可以使用通配符 *,但在 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>
    

    通配符#只能在比赛结束时使用。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多