gpt4 book ai didi

azure - 如何在使用 Azure 服务总线队列功能时使用更新的信息重新排队消息?

转载 作者:行者123 更新时间:2023-12-03 00:48:22 25 4
gpt4 key购买 nike

在使用Azure服务总线队列函数时,我们知道每当出现异常时,Azure函数都会执行默认的重试策略(最大计数= 10),我们想要做的是让我们的消息带有一个属性称为retryCount,因此当异常产生时,我们会增加retryCount += 1,并将当前异常添加到我们的消息中,然后下次当函数执行重试时, 我们可以知道这是第 x 次出现,并且有 x 条异常记录。我们知道 Message 对象有一个名为 deliveryCount 的只读属性,但是,我们无法绑定(bind)我们的附加信息或弄清楚最后的原因是什么。 Message 对象传送失败。

但是,在我们尝试实现我们的想法之后,我们发现每当函数执行重试时,它总是从队列中重新加载初始消息,而不是我们更新的消息。有没有办法让它重试更新的消息,而不强制将更新的消息重新发送回当前队列?

另外,我们如何自定义当前的重试逻辑,例如将最大重试次数从 10 减少到 1,并使用 Polly 来处理函数内部的某些场景?

最佳答案

您实际上并不需要自定义retryCount,因为消息已包含一个名为DeliveryCount 的系统属性,用于跟踪传送(读取处理)尝试的次数。如果您需要在重试之间存储一些额外的元数据,则需要 abandon您的留言。使用 Functions v2,要放弃消息,您将需要使用用于接收消息的消息接收器。

public static async Task ProcessMessage([ServiceBusTrigger("myqueue")] string message,
int deliveryCount,
MessageReceiver messageReceiver,
string lockToken)
{
//
await messageReceiver.AbandonAsync(lockToken,
new Dictionary<string, object> { { "Reason", "Blah" });
}

请注意,为了确保 Azure Functions 继续处理消息,您需要引发异常。否则,Functions 默认情况下假定消息已成功处理,并将尝试完成消息。

关于azure - 如何在使用 Azure 服务总线队列功能时使用更新的信息重新排队消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com