MessageConsumer.receive(long)
允许在接收时指定超时。
但是,我发现如果你让生产者离开(例如通过杀死进程),消费者的接收并不总是超时。事实上,有时它会永远等待,而且这个过程永远不会退出。
事实证明我可以在连接中添加ExceptionListener
,但这有一些缺点:
(1)除了我试图执行的操作之外,我可能会遇到错误;
(2)接收()本身仍然不一定完成;
(3)显然我们曾经使用ExceptionListener,它引起了一些我不了解的具体问题。
对我们来说看起来可行的一个潜在的黑客(我们正在使用ActiveMQ)是当发生停顿时,线程将处于wait()(这几乎肯定是特定于实现的但是看起来它似乎是一个常见的选择。)因此,如果我们得到一个异常,我们可以中断执行receive()调用的线程。
这是一个理智的解决方案吗?对于这个问题,是否有更可靠,众所周知,常用的解决方法?
答案 0 :(得分:0)
您可以设置消息监听器,而不是使用接收。这似乎是ActiveMQ中的一个错误,你有没有在JIRA中将其报告为一个问题?