【发布时间】: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 发出仅返回少量数据的请求时,不会出现清除消息。
如何避免在大型请求中清除数据?还是根本没有?
【问题讨论】: