Max*_*axx 6 activemq-classic jms
运行 ActiveMQ 5.4.0。我有一组用户通过通用 ActiveMQ JMS 提供程序相互订阅和发布各种主题。活动一段时间后,ActiveMQ 控制台开始显示
INFO|USAGE MANAGER memory limit reached. Stopping producer (ID ...... to prevent flooding topic .....
Run Code Online (Sandbox Code Playgroud)
对于各种主题,此消息会重复出现。我知道在某些情况下,有些消息永远不会传递。“网络”上的生产者都没有实施任何类型的流量控制。他们只是发送然后忘记。显然,一些生产商受到了阻碍,但大多数最终都摆脱了束缚。我认为这些主题是不持久/非持久的。
我只是使用默认的 activemq 配置。那么,如何最好地解决这个问题呢?禁用流量控制是否明智?如何禁用?
如果您使用默认的 ActiveMQ 配置,则流量控制处于打开状态。这就是您收到这些消息的原因。
如果你不想使用流量控制,你可以这样做:
<policyEntry topic="myTopic" producerFlowControl="false">
这将使用 ActiveMQ 提供的尽可能多的内存。但请注意,在某些时候,如果 ActiveMQ 认为您可能会给其他队列等造成问题,那么它会开始通过磁盘假脱机处理消息 - 这会影响性能,因为它会影响磁盘。这与持久性完全不同。但是,如果与总数据需求相比,您在启动时为 java 设置了合理的堆限制,那么应该没问题。
请注意,如果您想告诉它不要通过磁盘进行假脱机操作,则必须使用流量控制并且必须设置内存大小的最大值,例如:
<policyEntry topic="myTopic" producerFlowControl="true" memoryLimit="200mb">
<pendingQueuePolicy>
<vmQueueCursor/>
</pendingQueuePolicy>
</policyEntry>
Run Code Online (Sandbox Code Playgroud)
当达到内存限制时,这不会使用磁盘和块生产者。同样,您应该能够对其进行定制,使其适合您的配置。
有关流量控制的更多信息:http://activemq.apache.org/ Producer-flow-control.html
归档时间: |
|
查看次数: |
10034 次 |
最近记录: |