我正在使用 Azure功能 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(我的服务总线队列中可用)?
答案 0 :(得分:0)
重复容差 - 如果检查指向由于超时/分区最少丢失而失败而不是功能代码中的错误,那么下一个获得租约的EventProcessorHost该分区将开始从上一个已知检查点检索消息。
Event Hub保证至少一次投放,但不保证最多投放。
Azure Functions不会尝试更改该行为。如果没有重复消息是优先事项,那么您需要在工作流程中缓解它。 因此,当检查指向失败时,如果您的函数正在批处理级别处理消息,则需要管理更多重复消息。
有关详细信息,请参阅此case。