我对JMS比较陌生,遇到了实现我的第一个真正应用程序的奇怪问题。我想要任何帮助或建议。
背景:我使用AtiveMQ(java)作为非事务,非持久队列的消息代理。
设计:我有一个基于单个队列的直接生产者/消费者系统。许多节点(当前为2个)将消息放入队列中或从队列中消耗。选择器用于过滤节点收到的消息。
问题:生产者成功地将其项目放在队列上(我已经使用Web界面验证了它们在那里)但是消费者仍然被阻止而不会阅读它们。只有当我关闭生产者中的JMS连接时,消费者才能过上生活并按预期使用消息。
这个bevaior对我来说似乎很奇怪,当然你不应该完全挂断生产者连接,以便消费者能够从队列中读取。我一定是在某个地方犯了错误(可能是会话),但目前可能出错的事情数量很大,我不知道会导致这种行为的原因。
对于解决方案,问题原因或如何继续调试的任何提示都将不胜感激。
感谢您的时间,
如果您需要任何其他信息,我很乐意提供
答案 0 :(得分:1)
很难说没有看到代码,但听起来像是生产者被交易。您不必关闭生产者以便消费者接收消息,但是在您调用commit之前,事务处理的生产者不会发送消息。要检查的其他事项是连接已启动。此外,如果您有许多消费者,您应该查看预取设置以确保一个消费者不会占用所有消息,可能需要设置预取1,但很难说没有进一步了解您的用例。