ActiveMQ所能承载的主题/队列数测试

考虑这么一个场景:用监控服务器监控某设备,设备的数量相当庞大,每隔一段时间监控服务器就会把这些设备的最新状态信息投递到消息队列中,浏览器使用ActiveMQ的Ajax技术通过订阅来感兴趣的状态信息。 问题是设备太多了,如果让浏览器接受处理所有的消息显然是不合适的,网络带宽,JavaScript的执行速度都受限。所以要有选择地接收消息。 JMS消息格式中可以加入自定义的消息头,然后通过选择器就可以过滤消息(SQL92格式),但是在Web环境下,ActiveMQ 5.4的REST连接器现在已经支持选择器了,但是Ajax连接器仍旧没有(就在两天前刚加上了一个测试的Patch,NND!)。 所以当前稳妥的做法还是:一个设备一个主题,例如“device.1”“device.2”…接下来的问题就是ActiveMQ最大能开多少主题/队列。经过测试,默认配置,一千多个主题的时候ActiveMQ就会出现“java.lang.OutOfMemoryError: unable to create new native thread”的异常,上网查找,原来ActiveMQ默认配置下单个主题/队列是在单独的线程中处理的,需要修改ActiveMQ的启动脚本,例如Windows下面的activemq.bat,找到“-Dorg.apache.activemq.UseDedicatedTaskRunner=true”,改成“false”,这样就解决问题了。另外“-Xmx512M”酌情调大些。 实测10000个队列内存占用约1G。 当然这终究不是完美的解决方案,希望ActiveMQ能快点完善Ajax的选择器,呵呵。 题外话,如果不需要消息持久化的话,把activemq.xml中的“ …”注释掉即可。 参考: http://activemq.apache.org/rest.html#REST-Consumingwithselectors https://issues.apache.org/activemq/browse/AMQ-2874 http://old.nabble.com/how-many-topics-can-I-create-in-a-broker-before-getting-OutOfMemoryError%3A-Java-heap-space-td17905477.html http://old.nabble.com/Large-number-of-queues-%28HowTo%29-td23602928.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值