云pubsub消息排序是否意味着在确认前一条消息之前不会传递后续消息



push订阅上使用Cloud Pubsub消息排序,如果我发布了两条具有相同排序键的消息,比如消息#1和消息#2,那么消息#2只会在消息#1被确认后被推送吗?或者排序意味着即使没有确认,消息#2也保证在消息#1之后推送一些无穷小的时间差?

通过在github上使用publisher.py/subscriber.py工具脚本进行测试并注释掉ack调用,似乎答案是在确认消息#1之前不会传递消息#2。但那个测试是用pull完成的,所以我不确定push是否有不同的效果。

然而,文档似乎建议消息#2可以在消息#1得到确认之前交付:https://cloud.google.com/pubsub/docs/ordering#receiving_messages_in_order

当Pub/Sub服务用订购密钥重新传递消息时,Pub/Sub服务还使用相同的订购密钥,包括已确认的消息。确认这些再次发送消息。

如果使用acks进行严格排序,为什么在确认后续消息后会重新发送前一条消息?除非使用重播明确调用了重新交付?

当订阅处理程序是并发系统时,这种差异是至关重要的。

对于推送订阅,您必须确认第一条消息,才能在同一个排序键上接收下一条消息。

Cloud Pub/Sub至少提供一次配送服务。这意味着消息可能会多次发送给订阅者,即使这些消息已经得到确认。有了对订购的一致再交付保证,当重新交付消息时,在重新交付消息后收到的同一订购密钥的整个后续消息序列也将重新交付。

有关更多信息,您可以阅读以下由Cloud Pub/Sub-engineer撰写的关于该功能的博客文章:https://medium.com/google-cloud/google-cloud-pub-sub-ordered-delivery-1e4181f60bc8

只有在默认确认截止日期(10秒(内未确认消息时,才会重新发送消息。您可以调整ack截止日期的值,以便控制消息的重新传递。如果你想保留默认的ack截止日期,你也可以加快对消息的确认。

相关内容

  • 没有找到相关文章

最新更新