gpt4 book ai didi

azure - 在队列触发的 Azure Webjobs 中,是否可以在 Webjob 功能失败之后但中毒之前修改 Azure 存储队列消息?

转载 作者:行者123 更新时间:2023-12-02 04:28:09 25 4
gpt4 key购买 nike

我的 Azure webjobs 中有队列触发的函数。当然,正常行为是当函数失败 MaxDequeueCount 次时,消息被放入适当的有害队列中。我想在错误发生之后但在有害队列插入之前修改消息。示例:

初始消息:

{ "姓名":"汤姆", "年龄", 30"}

失败后,我想按如下方式修改消息并将修改后的消息插入到有害队列中:

{ "Name":"Tom", "Age", 30", "ErrorMessage":"无法找到用户"}

这可以做到吗?

最佳答案

根据 Webjobs 文档,在尝试处理消息 5 次失败后,消息将被放入有害队列中:

The SDK will call a function up to 5 times to process a queue message. If the fifth try fails, the message is moved to a poison queue. The maximum number of retries is configurable.

来源:https://github.com/Azure/azure-webjobs-sdk/wiki/Queues#poison

这是自动行为。但您仍然可以处理 WebJobs 函数代码中的异常(因此异常不会离开您的函数,并且不会触发自动有害消息处理),并使用输出绑定(bind)将修改后的消息放入有害队列。

另一个选项是检查 dequeueCount 属性,该属性指示尝试处理消息的次数。

You can get the number of times a message has been picked up for processing by adding an int parameter named dequeueCount to your function. You can then check the dequeue count in function code and perform your own poison message handling when the number exceeds a threshold, as shown in the following example.

public static void CopyBlob(
[QueueTrigger("copyblobqueue")] string blobName, int dequeueCount,
[Blob("textblobs/{queueTrigger}", FileAccess.Read)] Stream blobInput,
[Blob("textblobs/{queueTrigger}-new", FileAccess.Write)] Stream blobOutput,
TextWriter logger)
{
if (dequeueCount > 3)
{
logger.WriteLine("Failed to copy blob, name=" + blobName);
}
else
{
blobInput.CopyTo(blobOutput, 4096);
}
}

(也取自上面的链接)。

您的函数签名可能如下所示

public static void ProcessQueueMessage(
[QueueTrigger("myqueue")] CloudQueueMessage message,
[Queue("myqueue-poison")] CloudQueueMessage poisonMessage,
TextWriter logger)

关于azure - 在队列触发的 Azure Webjobs 中,是否可以在 Webjob 功能失败之后但中毒之前修改 Azure 存储队列消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51690979/

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