MessageConsumer.receive(long)
允许指定接收超时。
然而,我发现如果你让生产者离开(例如通过终止进程),消费者的接收并不总是超时。事实上,有时它会永远等待并且进程永远不会退出。
事实证明,我可以ExceptionListener
在连接中添加一个,但这有一些缺点:(1)我可能会收到关于我尝试执行的操作以外的其他事情的错误;(2) receive() 本身还不一定完成;(3) 显然我们曾经使用过 ExceptionListener 并且它导致了一些我不知道具体细节的其他问题。
一种对我们来说可行的潜在技巧(我们正在使用 ActiveMQ)是,当停顿发生时,线程将处于 wait() 中(这几乎可以肯定是特定于实现的,但它似乎是一个常见的选择。)因此,如果我们遇到异常,我们可以中断执行 receive() 调用的线程。
这是一个理智的解决方案吗?对于这个问题,是否有更可靠、众所周知、普遍实施的解决方法?