云 Pub/Sub 订阅者崩溃故障转移场景
Cloud Pub/Sub subscriber crash failover scenario
我们都知道 Pub/Sub 处于同一订阅状态的订阅者会在他们之间共享消息。我的意思是,如果队列中有两条消息(M1 和 M2)并且两个订阅者 S1 和 S2 在同一个订阅中监听该队列,则 S1 负责 M1,S2 负责 M2。
如果假设 S2 订阅者进程在处理 M2 时崩溃了怎么办? Cloud Pub/Sub 如何处理这种故障转移?
如果订阅者在确认消息之前崩溃,则消息将在确认截止日期过后再次发送给订阅者(假设消息在最大保留时间段内未被取消确认,默认为七天)。在您的场景中,如果 S2 永远不会回来,则消息将传递给 S1。如果 S2 确实恢复正常,则可以将消息传递给 S1 或 S2。一旦成功处理了确认(请注意,确认是尽力而为,因此可能会发生重复传递),消息将不再传递给订阅者。文档的 At-Least-Once Delivery section 解释得更详细一些。
我们都知道 Pub/Sub 处于同一订阅状态的订阅者会在他们之间共享消息。我的意思是,如果队列中有两条消息(M1 和 M2)并且两个订阅者 S1 和 S2 在同一个订阅中监听该队列,则 S1 负责 M1,S2 负责 M2。 如果假设 S2 订阅者进程在处理 M2 时崩溃了怎么办? Cloud Pub/Sub 如何处理这种故障转移?
如果订阅者在确认消息之前崩溃,则消息将在确认截止日期过后再次发送给订阅者(假设消息在最大保留时间段内未被取消确认,默认为七天)。在您的场景中,如果 S2 永远不会回来,则消息将传递给 S1。如果 S2 确实恢复正常,则可以将消息传递给 S1 或 S2。一旦成功处理了确认(请注意,确认是尽力而为,因此可能会发生重复传递),消息将不再传递给订阅者。文档的 At-Least-Once Delivery section 解释得更详细一些。