我想实现对ActiveMQ的性能测试,所以已经建立了基本的生产和消费在整个队列发送和接收消息。我已经创建了一个生产没有问题,得到它的消息写入到队列中的特定数:

 for(int i = 0; i < numberOfMessages; i++){
                try{
                    String message = generateText(sizeOfMessage);
                    produceMessage(message);
                }
                catch (Exception e) {
                    logger.error("Caught exception while sending message", e);
                }
            }

这仍然没有完成的问题,我已经与管理网站上的检查,具有挂起了正确数量的消息证实了这一点。

当我尝试从队列中接收消息时出现问题。使用一个简单的消费者从队列中读取,它会从队列中读取各种数量的消息,但随后将停止尝试接收消息的一个时。我可以看到,仍然有队列中的消息被读,但客户不会进步传递的信息之一。 我使用一个简单的方法来接收消息:

Message message = jmsTemplate.receive();

和它的工作原理对于某些消息(约20-30),但是然后只是锁。有人建议我,一些消息中的字符可能是一个转义字符(我用的是不同长度的随机字符串,由于这只是作为一个性能测试,实际上没有发送过任何内容),所以我改变了所有的消息到相同的字符串,该字符串是炭“2”和仍然没有运气的重复。 我使用Spring配置加载所有访问ActiveMQ的队列所需要的组件,并且所述队列在我的本地运行。

有帮助吗?

解决方案

不上这么多的意见还没有,但如果任何人有同样的问题,未来的参考,我已经找到了解决办法。减缓下来之前的ActiveMQ的配置限制的存储器由发送者和接收者所使用的量,给我的缺省值是:

<systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="20 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="1 gb" name="foo"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>

我完全删除此配置,现在它工作一个梦。我在进行性能测试,所以你可能需要把自己的约束,但是这肯定是我的问题的原因!

其他提示

它是一种经典的问题与消息;做什么用缓慢的消费者。 FWIW更近的版本的ActiveMQ诸如5.2允许你卷轴到磁盘,而不是阻断生产者当存储器变得低

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top