在 Event Hub Azure 的同一分区中重试时,新事件会发生什么情况?

What happens to new events when one is retrying in the same partition in Event Hub Azure?

我正在尝试了解当事件中心有重试策略时分区是如何执行事件的,但我找不到一个答案来解决当一个错误发生时新事件会发生什么并且是正在事件中心的同一分区中重试?

我猜出错的事件不应该阻止新事件的执行,当它重新连接时,它应该放在分区的末尾,所以在那之后进入分区的任何其他事件事件出错应该按顺序执行,没有任何阻塞。

有人可以解释一下在这种情况下实际发生了什么吗? 谢谢。

如果不了解应用程序上下文,很难准确回答。下面假设当前一代的 Azure SDK for .NET,但从概念上讲答案与其他版本类似。

发布期间的重试在客户端内执行,客户端将每个发布操作视为独立和隔离的。当您的应用程序调用 SendAsync 时,客户端将尝试发布它们并将在该调用范围内应用其重试策略。 SendAsync 调用完成后,您将得到关于调用成功还是失败的确定性答案。

如果 SendAsync 调用抛出,则重试策略已被应用并且异常是致命的或所有重试都已用完。操作已完成,客户端不再尝试发布这些事件。

如果您的应用程序进行单个 SendAsync 调用,那么在大多数情况下,它会理解发布操作的结果并保留事件的顺序。如果您的应用程序同时调用 SendAsync,则事件可能会乱序到达 - 由于网络延迟或重试。

虽然大多数时候,调用的结果是完全确定的,但确实存在一些极端情况。例如,如果 SendAsync 调用遇到超时,则服务是否收到事件是不明确的。客户端将重试,这可能会产生重复。如果您的应用程序看到 TimeoutException 表面,则无法确定事件是否已成功发布。