ActiveMQ消息不断被清除



如何避免在activemq中获取清除消息?

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

当我提出检索少量数据的请求时,当应用程序a从应用程序B获取数据并显示时,一切都很好。

然而,当应用程序A(通过amq(向应用程序B发出检索大量数据的请求时,我会在ActiveMQ active.log中不断收到已清除的消息(如下所示(,然后应用程序A永远不会收到数据。

我应该注意,应用程序B从应用程序A获得请求,然后获得请求的数据并将其转发回ActiveMQ(然后转发到应用程序A(。但在将数据发送到ActiveMQ后,会出现清除消息:

2020-03-12 16:29:03738|信息|温度-queue://ID:mcam443-PC-61788-1748020379598-6:1:1处理,清除1条未决消息:org.apache.activemq.broker.region.cursors.VMPendingMessageCursor@5d237edf|org.apache.activemq.broker.region.TempQueue|activemqBrokerService[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分钟,我发现应用程序B通常在2分钟内做出响应。所以这似乎没有帮助。

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

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

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

这里没有太多信息,但从有限的日志数据来看,清除消息表明您已经关闭了一个连接,而没有消耗来自临时目的地的所有消息,因此当连接关闭时,它创建的临时目的地将被释放,而该连接恰好有一条未消耗的消息。避免收到该消息的唯一方法是确保您已经消耗了Temp队列中的所有消息。

最新更新