1

我将一个 java 对象从一个线程发送到一个队列。使用队列中的消息调用相关 MDB 的 onMessage。onMessage,我将消息中存在的键与缓存中的键匹配,如果键不存在,我会抛出自定义运行时异常,只是为了使容器重新传递此消息。(我有另一个自治系统从外部系统响应向缓存添加密钥,它可能会慢 3-5 秒)在这种情况下,这个容器是否将这个未处理的消息添加到队列的末尾,或者它是立即重新交付?有没有办法延迟重新交货时间?假设队列总是每秒充满约 550 条消息。

问候

4

1 回答 1

0

HornetQ 目前有一个重新发送延迟功能,但所有后续消息都可以正常发送。

如果发生重新交付但尚未实施,则有一个功能请求可以将队列保留一段时间。

但是,如果队列中有多个消费者,则无论如何订单都会与您的消费者一起传播。如果deliveryCount > 1,您可以使用消息分组并在您的onMessage 上添加睡眠。消息分组是为了保证没有其他消费者(或另一个MDB 实例)将接收到无序的消息。

根据您的应用程序是如何完成的,并且根据您的要求,您可能希望只允许您的 MDB 的单个实例。

另外:查看消费者窗口大小,您可以在其中选择不缓冲客户端,当您有多个消费者或多个 mdb 实例时,这具有更好的行为。

于 2012-10-23T21:30:53.380 回答