我的程序接收消息的速度会很慢;我希望他们坚持排队,直到我收到所有这些并确认所有这些。在收到一堆消息之前,我不知道我是否有足够的消息。
我的问题:队列会阻塞,等待第一条消息的确认,然后再传递第二条消息吗?
将确认模式设置为时,Session.CLIENT_ACKNOWLEDGE
您可以获得所需的尽可能多的消息。消息将被锁定在服务器上,因此其他消费者无法同时检索它们。所以答案是否定的,队列不会阻塞(即使可能有特定于提供商的设置可以做到这一点,我不知道)。
但是,您只能一次全部确认。因此,当您收到 10 条消息并确认其中一条(不管是哪条)时,所有消息都将被确认。
检查您的参考控制消息确认
好吧,我使用示例生产者/消费者代码对此进行了测试。消费者实际上有一些代码(如果您切换到 ClientAcknowledge)。它收到一堆消息(其中 10 条)并且只确认最后一条。