2011-10-14 307 views
0

我是比较新的JMS也碰到实现我第一次真正的应用程序一个奇怪的问题,我的任何帮助或建议desporateJMS消息

背景:我使用AtiveMQ(Java)作为具有非事务处理,非实体队列的消息代理。

设计:我有一个基于单个队列的直接生产者/消费者系统。许多节点(当前为2个)选择器用于过滤节点收到的消息

问题:p roducer成功地将其项目放在队列中(我已经使用Web界面验证了它们在那里),但是消费者仍然被阻止并且不读取它们。只有当我关闭生产者中的JMS连接时,消费者才会跳入生活并按预期消费这些消息。

这对我来说似乎很怪异,你肯定不应该完全挂断生产者连接,让消费者能够从队列中读取。我一定在某个地方犯了一个错误(可能有会话),但目前可能出错的事情数量很大,而且我不知道是什么会导致这种行为。

有关解决方案的任何提示,问题的原因或仅仅如何继续调试将不胜感激。

感谢您的时间,

P.S如果requrie任何额外的信息,我很高兴地提供它

回答

1

难没有看到代码说,但它听起来像生产者交易。您不应该关闭生产者才能让消费者收到消息,但在您致电提交之前,事务处理生产者不会发送消息。其他要检查的事情是连接已经开始。同样,如果你有很多消费者,你应该看预取设置,以确保一个消费者不消耗所有的消息,可能需要设置预取1,但很难说没有进一步洞察你的用例。

+0

嗨蒂姆,谢谢你的回应。作为一个调试步骤,我试图在每次生产者消息发送之后添加一个session.commit,以便在会话进行之前进行事务处理。这只会导致“IllegalStateException:不是交易会话”,所以我不认为这是问题。真正奇怪的行为是我可以看到这些消息,甚至通过经纪人的网页界面浏览它们。他们是他们的产品展示,他们的消费者只有在接近生产者连接时才会接受:-( – PinkyNoBrain

+0

)最好的办法是创建一个JUnit测试用例并将其发布到ActiveMQ邮件列表或创建JIRA问题。 –