【问题标题】:ActiveMQ messages keeps getting purgedActiveMQ 消息不断被清除
【发布时间】:2020-03-12 17:36:01
【问题描述】:

如何避免在activemq中收到purge消息?

我有前端应用程序(应用程序 A)通过 ActiveMQ(版本 5.15.8)向后端应用程序(应用程序 B)请求数据。

当我发出检索少量数据的请求时,一切正常,因为应用 A 从应用 B 获取该数据并显示它。

但是,当应用 A 向应用 B(通过 amq)发出请求以检索大量数据时,我在 ActiveMQ active.log 中不断收到此 purged 消息(如下所示),然后应用 A 从不接收数据。

我应该注意到,App B 从 App A 获取请求,然后获取请求的数据并将其转发回 ActiveMQ(然后转发到 App A)。但是在将数据发送到 ActiveMQ 之后,会出现此 purge 消息:

2020-03-12 16:29:03,738 |信息 | temp-queue://ID:mcam443-PC-61788-1748020379598-6:1:1 on dispose, purge 共 1 条待处理消息: org.apache.activemq.broker.region.cursors.VMPendingMessageCursor@5d237edf | org.apache.activemq.broker.region.TempQueue |活动MQ BrokerService[activemqPrimary] 任务 89

这是我的 activemq.xml 文件的目标策略部分

    <destinationPolicy>
        <policyMap>
          <policyEntries>
            <policyEntry queue=">" expireMessagesPeriod="120000" producerFlowControl="true" memoryLimit="5mb">
              <pendingQueuePolicy>
                <vmQueueCursor/>
              </pendingQueuePolicy>
              <pendingMessageLimitStrategy>
                <constantPendingMessageLimitStrategy limit="-1"/>
              </pendingMessageLimitStrategy>

            </policyEntry>
            <policyEntry queue="D.>" expireMessagesPeriod="120000" producerFlowControl="true" memoryLimit="5mb">
              <pendingQueuePolicy>
                <vmQueueCursor/>
              </pendingQueuePolicy>
              <pendingMessageLimitStrategy>
                  <constantPendingMessageLimitStrategy limit="-1"/>
              </pendingMessageLimitStrategy>
            </policyEntry>
          </policyEntries>
        </policyMap>
    </destinationPolicy>

我将 expireMessagesPeriod 设置为 4 分钟,我看到 App B 通常会在 2 分钟内响应。所以这似乎没有帮助。

我还将 constantPendingMessageLimitStrategy 设置为 -1,这应该禁用丢弃消息 (http://activemq.apache.org/slow-consumer-handling.html)

同样,当应用 A 发出仅返回少量数据的请求时,不会出现清除消息。

如何避免在大型请求中清除数据?还是根本没有?

【问题讨论】:

    标签: java activemq


    【解决方案1】:

    这里没有太多信息可以继续,但从有限的日志数据来看,清除消息表明您已关闭连接而没有消耗来自临时目标的所有消息,因此当连接关闭时它创建的临时目标被处理并且一个碰巧有1条未消费的消息。避免收到该消息的唯一方法是确保您已使用 Temp Queue 中的所有消息。

    【讨论】:

      猜你喜欢
      • 2013-06-25
      • 2019-06-11
      • 1970-01-01
      • 2016-02-02
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多