DMLC消息消耗和确认

问题描述:

这是Difference between AUTO_ACKNOWLEDGEMENT mode with and without Spring JMS的后续问题。DMLC消息消耗和确认

我正在使用DMLC,并且我的并发使用者数为1.预取限制为> 1.我收到消息并在侦听器执行之前进行确认。所以,当侦听器正在执行时,代理具有更多的消息,并按照预取设置将消息发送给使用者。由于听众仍在执行,消费和确认如何对后续消息起作用?

是否会为所有新消息调用receive()方法并确认它们并等待侦听器执行完成? [如果是这种情况,我很困惑为什么我在消费者统计中得到未确认的消息计数] 或 receive()将被调用,但是直到前一个监听器完成其执行后才会确认下一个消息? [如果我的听众执行被其他原因阻止,这可能会解释未确认的消息] 或 引擎盖下发生了其他事情。

有人能解释一下吗?它会帮助我很多。

感谢和干杯!

编号被调用来获取第一个消息;收到退货时确认;容器线程然后调用监听器。 (如果要回滚失败的传递 - 如果侦听器引发异常,则必须使用与DMLC的事务)。

任何预取消息都由代理交付给客户端库,但直到听众退出(onMessage())之后,它才会被Spring看到。即在与MessageListener相同的线程上被调用。

预取的好处在于下一个消息将立即可用于下一个,但缺点是,如果您有多个消费者线程,并且侦听器有时可能需要很长时间才能处理消息,则可以预取消息在他的队列中,而其他线程空闲。

+0

所以,这可能会在消息代理端留下未确认的消息。 – xabhi 2015-02-12 21:26:46

+0

只有当你的听众举起线程;一旦当前消息处理完成,下一个消息将被接收/接收。如果您不想看到未分类的消息,请不要使用预取。 – 2015-02-12 22:07:42