【问题标题】:how to retry when call retryQueue.AddSync () also fails?当调用 retryQueue.AddSync() 也失败时如何重试?
【发布时间】:2018-03-01 19:02:48
【问题描述】:

我正在使用 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 之类的东西(在我的服务总线队列中可用)?

【问题讨论】:

  • 理论上,如果您回退到用于存储进度/偏移量的同一个存储帐户,它们应该要么都工作要么都失败。不过我没有足够的实践经验。

标签: c# azure queue azure-functions azure-eventhub


【解决方案1】:

重复容差 - 如果 check-pointing 由于超时/分区最少丢失而不是函数代码中的错误而失败,则下一个 EventProcessorHost 获得租约该分区将开始从最后一个已知检查点检索消息。

Event Hub 保证 at-least-once 交付,但不保证 at-most-once 交付。

Azure Functions 不会尝试更改该行为。如果没有重复的消息是一个优先事项,那么您将需要在您的工作流程中减轻它。 因此,当检查点失败时,如果您的函数在批处理级别处理消息,则需要管理更多重复消息。

更多详情,请参考此case

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2017-07-31
    相关资源
    最近更新 更多