为死信队列中的消息设置 individualDeadLetterStrategy、sharedDeadLetterStrategy 和过期时间
Set individualDeadLetterStrategy, sharedDeadLetterStrategy and expiry for messages in dead letter queue
我要设置以下内容
- 用于为每个队列设置 DL 队列前缀的 individualDeadLetterStrategy
- sharedDeadLetterStrategy 禁用 DL 队列中过期消息的处理
- 设置 DL 队列中消息的过期时间
在关注 dl-queue-handling 后,我想出了以下无效的片段
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
</deadLetterStrategy>
</policyEntry>
<policyEntry queue=">">
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
<policyEntry queue="CommandQueue">
<deadLetterStrategy>
<expiration="600000" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
错误:
XML 来自 class 路径资源 [activemq.xml] 的文档无效;嵌套异常是 org.xml.sax.SAXParseException;行号:74;列数:32;元素类型“expiration”必须后跟属性规范“>”或“/>”
其中 lineNumber: 74 对应于上面代码段中的行 。
或者,我假设给定队列名称的所有策略都应该在相同的 policyEntry 下,所以我也尝试了以下代码片段:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
<policyEntry queue="CommandQueue">
<deadLetterStrategy>
<expiration="600000" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
错误:
原因:来自 class 路径资源 [activemq.xml] 的 XML 文档中的第 63 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:63;列数:72; cvc-complex-type.2.4.d:发现以元素 'sharedDeadLetterStrategy' 开头的无效内容。此时不需要子元素。
其中第 63 行对应于:sharedDeadLetterStrategy processExpired="false"
如您引用的文档中所述,expiration
是一个 属性 。它不能单独存在于标签中。那是无效的 XML。您应该在 individualDeadLetterStrategy
.
上进行设置
此外,您还可以在 individualDeadLetterStrategy
上设置 processExpired="false"
。
试试这个:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" processExpired="false" expiration="600000"/>
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
我要设置以下内容
- 用于为每个队列设置 DL 队列前缀的 individualDeadLetterStrategy
- sharedDeadLetterStrategy 禁用 DL 队列中过期消息的处理
- 设置 DL 队列中消息的过期时间
在关注 dl-queue-handling 后,我想出了以下无效的片段
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
</deadLetterStrategy>
</policyEntry>
<policyEntry queue=">">
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
<policyEntry queue="CommandQueue">
<deadLetterStrategy>
<expiration="600000" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
错误: XML 来自 class 路径资源 [activemq.xml] 的文档无效;嵌套异常是 org.xml.sax.SAXParseException;行号:74;列数:32;元素类型“expiration”必须后跟属性规范“>”或“/>”
其中 lineNumber: 74 对应于上面代码段中的行
或者,我假设给定队列名称的所有策略都应该在相同的 policyEntry 下,所以我也尝试了以下代码片段:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
<policyEntry queue="CommandQueue">
<deadLetterStrategy>
<expiration="600000" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
错误: 原因:来自 class 路径资源 [activemq.xml] 的 XML 文档中的第 63 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:63;列数:72; cvc-complex-type.2.4.d:发现以元素 'sharedDeadLetterStrategy' 开头的无效内容。此时不需要子元素。
其中第 63 行对应于:sharedDeadLetterStrategy processExpired="false"
如您引用的文档中所述,expiration
是一个 属性 。它不能单独存在于标签中。那是无效的 XML。您应该在 individualDeadLetterStrategy
.
此外,您还可以在 individualDeadLetterStrategy
上设置 processExpired="false"
。
试试这个:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" processExpired="false" expiration="600000"/>
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>