Activemq 为死信队列中的消息设置individualDeadLetterStrategy、sharedDeadLetterStrategy和expiry

Activemq 为死信队列中的消息设置individualDeadLetterStrategy、sharedDeadLetterStrategy和expiry,activemq,broker,Activemq,Broker,我想设置以下内容 individualDeadLetterStrategy为每个队列设置DL队列前缀 SharedDeadLetter禁用DL队列中过期消息处理的策略 设置DL队列中消息的过期时间 在接下来的部分中,我提出了以下不起作用的片段 <destinationPolicy> <policyMap> <policyEntries> <policyEntry queue="&

我想设置以下内容

  • individualDeadLetterStrategy为每个队列设置DL队列前缀
  • SharedDeadLetter禁用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.sax.saxpasseeption;行号: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>
    
    
    
    错误: 原因:来自类路径资源[activemq.XML]的XML文档中的第63行无效;嵌套异常为org.xml.sax.saxpasseeption;行号:63;栏目号:72;cvc复杂类型.2.4.d:发现以元素“sharedDeadLetterStrategy”开头的无效内容。此时不需要子元素。


    其中第63行对应于:sharedDeadLetterStrategy processExpired=“false”

    如您引用的文档中所述,
    过期
    是一个属性。它不能单独存在于标记中。这是无效的XML。您应该在
    个人死信策略中设置此选项

    此外,您还可以在
    individualDeadLetterStrategy
    上设置
    processExpired=“false”

    请尝试以下方法:

    
    
    这很有效。我有以下问题:1。个人DeadLetterStrategy和shareddeadletterstrategy的区别,何时使用2。ActiveMQ站点说要对DL队列消息应用到期,请在队列名称regex中指定,以避免死信队列,因此是否有一个regex允许我将到期应用于除死信队列之外的所有队列@justin您应该为这些后续问题创建新问题。如果我的回答针对您的原始问题,请将其标记为正确,以帮助将来有相同问题的其他用户。谢谢