为死信队列中的消息设置 individualDeadLetterStrategy、sharedDeadLetterStrategy 和过期时间

Set individualDeadLetterStrategy, sharedDeadLetterStrategy and expiry for messages in dead letter queue

我要设置以下内容

  1. 用于为每个队列设置 DL 队列前缀的 individualDeadLetterStrategy
  2. sharedDeadLetterStrategy 禁用 DL 队列中过期消息的处理
  3. 设置 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>