python 使用事件集线器的多个接收器接收相同的消息

dxpyg8gm  于 5个月前  发布在  Python
关注(0)|答案(1)|浏览(55)

在Azure中创建事件中心。此事件中心具有$default消费者组。它具有32个分区。
这个事件中心有一个发送者,它以特定的频率发送消息。现在这个事件中心有多个接收者。发送和接收的代码是完全按照this document用Python编写的。这个接收者Python脚本在5个不同的VM中运行。
预期只有一个接收者应该接收消息并处理它,但可以观察到不止一个接收者正在接收相同的消息。
我读到如果检查点没有完成,这可能会发生。但是在示例代码中,我看到检查点已经完成了。还缺少什么?或者我的期望错了?
附言:以前工作过的人已经开始使用事件中心,整个基础设施和代码都围绕着事件中心。现在很难离开事件中心。所以我计划现在坚持使用事件中心。

pu3pd22g

pu3pd22g1#

Azure事件中心提供大规模的“至少一次”交付,这意味着可能会发生重复。虽然通常你不应该遇到任何情况,但在某些情况下可能会发生。其中一些情况包括但不限于:

**一个消费者组内的一个分区上有多个接收者。**在这种情况下,所有的读取器都接收该分区的所有事件。这可能与您的情况无关,因为您使用的是SDK,它会处理这个问题。
**提交检查点之前接收器崩溃。**检查点通常定期执行。如果处理器在标记最后一个成功处理的事件的位置之前崩溃,则新处理器将从最后一个提交的检查点启动。这可能导致拾取第一个消费者在崩溃之前处理的某些事件。这很可能是您的情况。

理想情况下,你应该设计你的下游系统是幂等的。如果这太困难或者不可行的话,考虑删除重复事件的策略。

相关问题