我正在使用Azure Function EventHub触发器。来到EH的消息非常关键,我们不想错过任何消息。如果在处理来自我的事件中心的消息时发生了某些事情,我会按如下方式写入我的retryQueue:
try
{
await retryQueue.AddAsync (some data from my hub);
// if this call also fails, it goes to my catch
}
catch (exception e)
{
await retryQueue.AddAsync (my eventData);
// but what if this call also fails?
}
但是当我的catch块中的AddAsync()调用失败时会发生什么?我如何以及在何处保存邮件以便以后处理?是否存在IsTransient(我的服务总线队列中可用)?
重复容差 - 如果由于超时/分区最少丢失导致检查指向失败而不是功能代码中的错误,那么获得该分区租约的下一个EventProcessorHost将开始从上一个已知检查点检索消息。
Event Hub保证至少一次交付但不是最多一次交付。
Azure Functions不会尝试更改该行为。如果没有重复消息是优先事项,那么您需要在工作流程中缓解它。因此,当检查指向失败时,如果您的功能正在批处理级别处理消息,则需要管理更多重复消息。
有关更多详细信息,请参阅此case。