我从一个线程发送一个java对象到一个队列。通过队列中的消息调用relavent MDB的onMessage。onMessage,我将消息中存在的关键字与缓存中的关键字进行匹配,如果关键字不存在,我将抛出自定义运行时异常,只是为了让容器重新传递此消息。(我有另一个自治系统,它将来自外部系统响应的键添加到缓存中,它可能会慢3-5秒)在这种情况下,这个容器是将这个未处理的消息添加到队列的末尾,还是立即重新传递?有没有办法延迟送货时间?假设队列每秒都被550条左右的消息填满。
问候
发布于 2012-10-24 05:30:53
HornetQ上目前有一个重新传递延迟功能,但所有后续消息都可以很好地传递。
有一个功能请求,用于在重新交付发生但尚未实现的情况下保持队列一段时间。
但是,如果队列中有多个消费者,那么无论如何订单都会散布在消费者中。如果deliveryCount > 1,您可以使用消息分组,并在您的onMessage上添加睡眠。消息分组是为了保证不会有其他消费者(或其他MDB实例)接收到顺序混乱的消息。
根据您的应用程序是如何完成的,以及根据您的需求,您可能希望只允许MDB的单个实例。
另外:查看consumer-window-size,您可以在客户端上选择无缓冲,当您有多个使用者或多个mdb实例时,这会有更好的行为。
https://stackoverflow.com/questions/13027323
复制相似问题