我从一个线程向队列发送一个java对象。使用队列中的消息调用相关MDB的onMessage。 onMessage,我将消息中的密钥与缓存中的密钥匹配,如果密钥不存在,我抛出一个自定义的runtimeexception只是为了让容器重新发送此消息。 (我有另一个自治系统,它从外部系统响应中添加缓存键,它可能会慢一点3-5秒) 在这种情况下,此容器是否将此未处理的消息添加到队列的末尾,还是立即重新传送?有没有办法延迟重新传递时间?假设队列总是每秒充满~550条消息。
问候
答案 0 :(得分:0)
目前HornetQ上有一个重新传递延迟功能,但所有后续消息都可以正常传送。
如果发生重新发送但尚未实施,则会有一个功能请求来保留队列一段时间。
但如果队列中有多个消费者,订单将随消费者一起传播。如果deliveryCount>您可以使用消息分组并在onMessage上添加休眠。 1.消息分组是为了保证没有其他消费者(或另一个MDB实例)不按顺序接收消息。
根据您的应用程序完成方式,根据您的要求,您可能只想允许MDB的单个实例。
另外:查看消费者窗口大小,您可以在客户端上选择无缓冲,当您有多个使用者或多个mdb实例时,该缓冲具有更好的行为。