1

我有一个在 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. 如果我将*#放在字符之间,服务器会在启动期间引发异常。

4

1 回答 1

2

根据理解 HornetQ 通配符语法

'.'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'and 'news.usa.sport',但不匹配'news.europe.politics'

在您的配置中,您可以使用通配符*,但在 JBoss 7.1.1 中,当您使用 character 输入值时,配置解析器会抛出异常*

错误类似于:

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

在 value 中使用空格时也会出现同样的问题,这个问题在: Logger 类别不能有空格中描述

现在一个选项是更新到 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>

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

于 2014-12-30T23:16:14.423 回答