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



我试图了解当事件集线器有重试策略时,分区是如何执行事件的,并且我找不到当一个新事件发生错误并在事件集线器的同一分区重试时会发生什么的答案?

我猜测,发生错误的事件不应该阻止新事件的执行,当它重新定时时,应该将其放在分区的末尾,所以在该事件发生错误后进入分区的任何其他事件都应该按顺序执行,没有任何阻塞。

有人能解释一下在这种情况下到底发生了什么吗?谢谢

如果不了解应用程序上下文,很难准确回答。以下假设为的当前一代Azure SDK。NET,尽管从概念上讲,其他人的答案是相似的。

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

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

如果您的应用程序只调用了一个SendAsync,那么在大多数情况下,它将理解发布操作的结果,并保留事件的顺序。如果您的应用程序同时调用SendAsync,那么事件可能会无序到达,原因可能是网络延迟或重试。

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

最新更新