我正在尝试在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),但随后会锁定.我建议消息中的某些字符可能是转义符(我使用的是长度可变的随机字符串,因为这只是性能测试,实际上并未发送任何内容),所以我更改了所有消息到同一字符串,这是char’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>
我完全删除了此配置,现在可以实现梦想.我正在执行性能测试,因此您可能需要施加自己的约束,但这绝对是我遇到问题的原因!
标签:jms,activemq,java 来源: https://codeday.me/bug/20191108/2004753.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。