我不确定在下面的场景中会发生什么,如果有人解释它会有很大的帮助。
生产者(P)发送消息M1,M2,M3,M4,M5,M6,M7;假设从时间T1发送到T7。
假设ActiveMQ用作JMS提供程序(AMQ)
消息使用者(L)将是绑定到该主题的侦听器。 主题名称:jmsTopic
情景1:
AMQ正在运行,L未连接到AMQ中的jmsTopic。 P将M1发送到M7到jmsTopic。如果L在时间上连接到jmsTopic,例如T8大于T7,它将接收消息M1至M7,还是仅接收在时间T8之后发送给主题的消息。
场景2: AMQ正在运行,L连接并且正在监听jmsTopic,P将M1发送到M4。 L接收M1到M4。同时L处理M1到M4,P将M5发送到M7,但是在处理M4期间L崩溃。如果L再次将自己连接到jmsTopic,它是否接收M5到M7,或者只有L连接到jmsTopic后发送的消息才会被L接收。
场景3: AMQ正在运行,L连接并监听jmsTopic,P将M1发送到M7。然而,AMQ崩溃;知道AMQ状态,并在AMQ启动并运行后重新连接。
答案 0 :(得分:1)
场景1:AMQ正在运行,L不是 连接到AMQ的jmsTopic。 P发送 M1到M7到jmsTopic。如果L是 连接到jmsTopic的时候说T8 它将大于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以保证交付;所有邮件都将被序列化,以保证收到邮件。