0

MessageConsumer.receive(long)允许指定接收超时。

然而,我发现如果你让生产者离开(例如通过终止进程),消费者的接收并不总是超时。事实上,有时它会永远等待并且进程永远不会退出。

事实证明,我可以ExceptionListener在连接中添加一个,但这有一些缺点:(1)我可能会收到关于我尝试执行的操作以外的其他事情的错误;(2) receive() 本身还不一定完成;(3) 显然我们曾经使用过 ExceptionListener 并且它导致了一些我不知道具体细节的其他问题。

一种对我们来说可行的潜在技巧(我们正在使用 ActiveMQ)是,当停顿发生时,线程将处于 wait() 中(这几乎可以肯定是特定于实现的,但它似乎是一个常见的选择。)因此,如果我们遇到异常,我们可以中断执行 receive() 调用的线程。

这是一个理智的解决方案吗?对于这个问题,是否有更可靠、众所周知、普遍实施的解决方法?

4

1 回答 1

0

您可以设置一个消息侦听器,而不是使用接收。这似乎是 ActiveMQ 中的一个错误,您是否在他们的 JIRA 中将其报告为问题?

于 2013-05-10T14:26:26.063 回答