1

我不确定在以下情况下会发生什么,如果有人解释它会很有帮助。

生产者(P)发送消息 M1、M2、M3、M4、M5、M6、M7;假设它是从时间 T1 发送到 T7。

假设 ActiveMQ 被用作 JMS Provider (AMQ)

消息消费者 (L) 将是绑定到主题的侦听器。主题名称:jmsTopic

方案 1:

AMQ 正在运行,L 没有连接到 AMQ 中的 jmsTopic。P 将 M1 到 M7 发送到 jmsTopic。如果 L 在时间 T8 连接到 jmsTopic,它大于 T7,它会接收消息 M1 到 M7 还是只接收 T8 时间之后发送到主题的消息。

场景2:AMQ正在运行,L连接并监听jmsTopic,P发送M1到M4。L 接收 M1 到 M4。同时L处理M1到M4,P发送M5到M7,但是L在处理M4的过程中崩溃了。如果 L 再次将自己连接到 jmsTopic ,它会收到 M5 到 M7 还是只有在 L 连接到 jmsTopic 之后发送的消息才会被 L 接收。

场景3:AMQ正在运行,L连接并监听jmsTopic,P发送M1到M7。但是 AMQ 崩溃了;是否知道 AMQ 状态并在 AMQ 启动并运行后重新连接。

4

1 回答 1

1

场景一:AMQ正在运行,L没有连接到AMQ中的jmsTopic。P 将 M1 到 M7 发送到 jmsTopic。如果 L 在时间 T8 连接到 jmsTopic,它大于 T7,它会接收消息 M1 到 M7 还是只接收 T8 时间之后发送到主题的消息。

队列的全部目的是保证交付。在侦听器将它们从队列中取出之前,不会处理任何消息,因此在 T8 之前到达的所有消息都将在那里。

场景2:AMQ正在运行,L连接并监听jmsTopic,P发送M1到M4。L 接收 M1 到 M4。同时L处理M1到M4,P发送M5到M7,但是L在处理M4的过程中崩溃了。如果 L 再次将自己连接到 jmsTopic ,它会收到 M5 到 M7 还是只有在 L 连接到 jmsTopic 之后发送的消息才会被 L 接收。

与 #1 相同:侦听器将接收所有 M5 和更新的消息。

场景3:AMQ正在运行,L连接并监听jmsTopic,P发送M1到M7。但是 AMQ 崩溃了;是否知道 AMQ 状态并在 AMQ 启动并运行后重新连接。

设置 AMQ 以保证交付;所有消息都将被序列化,以保证收到时送达。

于 2011-05-17T14:30:27.680 回答