【问题标题】:Set individualDeadLetterStrategy, sharedDeadLetterStrategy and expiry for messages in dead letter queue为死信队列中的消息设置 individualDeadLetterStrategy、sharedDeadLetterStrategy 和 expiry
【发布时间】:2020-07-18 00:37:49
【问题描述】:

我想设置以下内容

  1. individualDeadLetterStrategy 为每个队列设置 DL 队列前缀
  2. sharedDeadLetterStrategy 禁用对 DL 队列中过期消息的处理
  3. 为 DL 队列中的消息设置过期时间

在关注dl-queue-handling 时,我想出了以下不起作用的sn-ps

  <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.SAXParseException;行号:74;列号:32;元素类型“过期”必须后跟属性规范“>”或“/>”

其中lineNumber: 74对应上面sn-p中的行。

另外,我假设给定队列名称的所有策略都应该在同一个 policyEntry 下,所以我也尝试了以下 sn-p:

  <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.SAXParseException;行号:63;列号:72; cvc-complex-type.2.4.d:发现以元素“sharedDeadLetterStrategy”开头的无效内容。此时不需要子元素。

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

【问题讨论】:

    标签: activemq broker


    【解决方案1】:

    如您引用的文档中所述,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>
    

    【讨论】:

    • 那行得通。我有后续问题:1. individualDeadLetterStrategy 和 shareddeadletterstrategy 之间的区别,何时使用什么 2. ActiveMQ 站点说要对 DL 队列消息应用到期,具体在队列名称正则表达式中以避免死信队列,那么是否有一个正则表达式可以让我将过期应用于除死信队列之外的所有队列@justin
    • 您应该为这些后续问题创建新问题。如果我的回答解决了您最初的问题,请将其标记为正确,以帮助将来有相同问题的其他用户。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2019-09-27
    • 2015-08-15
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多