我想设置以下内容
- 为每个队列设置DL队列前缀的策略
- sharedDeadLetter禁用DL队列中过期消息处理的策略
- 设置DL队列中消息的过期时间
在接下来的dl队列处理中,我提出了以下不起作用的片段
<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>
错误:类路径资源[activemq.XML]中的XML文档无效;嵌套异常为org.xml。ax.SAXParseException;行号:74;columnNumber:32;元素类型";过期";必须跟在属性规范之后>quot;或"/>quot
其中lineNumber:74对应于<expiration=";600000〃/>。
或者,我假设给定队列名称的所有策略都应该在相同的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>
错误:原因:类路径资源[activemq.XML]的XML文档中的第63行无效;嵌套异常为org.xml。ax.SAXParseException;行号:63;列编号:72;cvc复杂类型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>