我注意到使用“仅一次交付”会影响使用拉取和确认时的性能。拉取和确认消息所需的时间最多延长 5 倍(约 0.2 秒)。如果我禁用“仅一次交付”,响应速度会非常快,拉取和确认的时间都在 0.05 秒以下。我使用curl和php进行了测试,结果相似(重用现有连接)。
我担心禁用此功能会产生什么后果。如果禁用此功能,重复发生的频率是多少?有没有办法在不启用此功能的情况下避免重复?
例如,如果我的确认截止时间为 60 秒,我拉取一条消息,然后在 10 秒后再次拉取,我可以再次收到相同的消息吗?从文档中不清楚重复发生的频率以及如果禁用此选项在什么情况下会发生重复。
如果禁用此功能,重复发生的频率如何?
根据我的经验,这种情况并不常见,但这并不重要,您的系统需要能够以某种方式处理它们,因为它会发生。
有没有办法在不启用此功能的情况下避免重复?
在谷歌方面?不,否则这个选项还有什么意义。用户应该通过仅处理每个 id 一次来使用 messageID 消除重复,或者确保您执行的任何操作都是幂等的。或者你不打扰,希望它不会经常发生并承受后果(无论是崩溃,在你可能会或可能不会修复的地方出现腐败,......)。
从文档中不清楚,如果禁用此选项,重复发生的频率以及在什么情况下会发生。
Pub/sub 是一个复杂的高度可扩展的分布式系统,重复的消息不是固定时间表上的预期功能,如果您想要高性能,它们是必要的邪恶。没有人能预测它们何时会发生,只能预测它们会发生。
在我使用的系统中,重复发生的频率足以给我们带来巨大的问题。