ActiveMQ和maxPageSize

6
我想将maxPageSize从默认值200设置为更大的数值。
这是我在activemq.xml文件中的设置方式:
<destinationPolicy>
            <policyMap>
              <policyEntries>
              ---
                <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb" maxPageSize="SOME_LARGE_NUMBER">
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>

这次更改帮助我使用QueueBrowser.getEnumeration()获取队列中的消息数量,因为即使队列中的消息数量大于200,它也会返回200。详见:http://docs.oracle.com/javaee/1.4/api/javax/jms/QueueBrowser.html
将maxPageSize从200更改为1000的副作用是什么?它是否会影响代理的性能?
除了这个页面上的“每次从存储器中分页的最大持久消息数”之外,我没有看到有关此属性的文档: http://activemq.apache.org/per-destination-policies.html
感谢您的时间!
1个回答

4

最大页面大小简单地指示将加载到内存中的消息数量,因此影响是...它将消耗更多的内存。

不过,从字里行间可以看出,您这样做的原因是一种反模式。作为应用程序的一部分进行队列浏览实际上是对消息使用的误用 - 当作为队列处理时,消息队列的效果最佳。先进先出。而不是作为一个数组,你扫描以查看是否有消息到达。

您最好消耗每条消息,并将其分类到一堆其他队列中,具体取决于它们的有效负载,然后以不同方式处理第二级队列,或者将有效负载存储到数据库中并根据内容进行选择。


谢谢,我考虑使用Spring DMLC,在其中设置X个动态消费者以快速处理消息。在我的情况下,我有一个要求,即仅在一分钟后才捡起放入队列中的消息。我使用CRON作业来完成此操作,CRON作业每分钟运行一次,根据队列大小创建消费者。使用Spring DMLC时,当消息在队列中时,它们会被捡起。我无法控制Spring DMLC每分钟运行一次。这就是为什么我使用队列浏览器来计算队列中大约的消息数量,然后启动消费者的原因。 - serverfaces

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接