java – 如何避免在ActiveMQ检查点调用后阻止队列浏览
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何避免在ActiveMQ检查点调用后阻止队列浏览,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2081字,纯文字阅读大概需要3分钟。
内容图文
![java – 如何避免在ActiveMQ检查点调用后阻止队列浏览](/upload/InfoBanner/zyjiaocheng/773/43e3ffff3243415f89f12098b30501d8.jpg)
使用具有大量持久性队列的ActiveMQ(250)á1000持久性TextMessagesá10KB时出现问题.
一个场景要求这些消息在很长时间(几天)内保留在存储中,直到它们被消耗为止(大量数据被分阶段供许多消费者分发,可能在某些天离线).
持久存储充满这些消息后,在代理重启后,我们可以浏览/使用一些队列,直到30秒后#checkpoint调用.
此调用使代理使用所有可用内存,并且永远不会将其释放用于其他任务,例如队列浏览/使用.在内部,MessageCursor似乎决定,没有足够的内存并停止向浏览器/消费者传递队列内容.
=>有没有办法通过配置来避免这种行为或这是一个错误?
期望是,我们可以在任何情况下使用/浏览任何队列.
以下设置现已投入生产一段时间,并在ActiveMQ文档中找到了一些建议(目标策略,systemUsage,持久性存储选项等).
>使用ActiveMQ测试行为:5.11.2,5.13.0和5.5.1.
>内存设置:Xmx = 1024m
> Java:1.8或1.7
>操作系统:Windows,MacOS,Linux
> PersistenceAdapter:KahaDB或LevelDB
>光盘:足够的可用空间(200 GB)和物理内存(最大16 GB).
除了上面提到的设置,我们对代理使用以下设置(顺便说一句:将memoryLimit更改为较低的值,如1mb不会改变情况):
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="false" optimizedDispatch="true" memoryLimit="128mb" timeBeforeDispatchStarts="1000">
<dispatchPolicy>
<strictOrderDispatchPolicy />
</dispatchPolicy>
<pendingQueuePolicy>
<storeCursor />
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<systemUsage>
<systemUsage sendFailIfNoSpace="true">
<memoryUsage>
<memoryUsage limit="500 mb" />
</memoryUsage>
<storeUsage>
<storeUsage limit="80000 mb" />
</storeUsage>
<tempUsage>
<tempUsage limit="1000 mb" />
</tempUsage>
</systemUsage>
</systemUsage>
如果我们将destinationPolicy中的cursorMemoryHighWaterMark设置为更高的值(如150或600),具体取决于memoryUsage和可用堆空间之间的差异,可以解决一下变通方法的情况,但对于生产系统而言,这不是我的选择.视图.
屏幕显示来自Oracle Mission Control的信息,显示从未从内存中释放的ActiveMQTextMessage实例:
解决方法:
我遇到了类似的问题,ActiveMQ并没有真正被设计为“数据库”;消息必须流经ActiveMQ,对于这些长期存储,我建议使用数据库或使用FTP交换文件.
我还建议使用producerFlowControl =“true”,这样如果ActiveMQ无法处理消息,它将减慢生产者的速度.
内容总结
以上是互联网集市为您收集整理的java – 如何避免在ActiveMQ检查点调用后阻止队列浏览全部内容,希望文章能够帮你解决java – 如何避免在ActiveMQ检查点调用后阻止队列浏览所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。