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