gpt4 book ai didi

azure - 如何禁用特定队列项目的 Azure Webjob 存储队列处理?

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

我有一个队列触发的 Azure webjob 函数:

public void ProcessQueueMessage([QueueTrigger("%MyQueue%")] Item item, TextWriter logger)
{
// Do normal processing...
}

我想根据条件有选择地忽略某些队列项目。例如,如果我的小部件 X 没有了,并且我不想继续处理小部件发货,直到有库存为止。所以我想暂时忽略/跳过所有 Widget X 队列项目。所以类似:

public void ProcessQueueMessage([QueueTrigger("%MyQueue%")] Item item, TextWriter logger)
{
if (!HaveStock(WidgetX))
// Ignore queue item - treat it as if it was not in the queue at all

// Do normal processing...
}

抛出异常来导致处理失败对我来说似乎不是一个选择,因为它会破坏消息。

我可以将 VisibilityTimeout 设置为任意高的值,然后抛出异常,但是当我想要执行处理(而不是仅仅等待超时)时,我必须对队列项进行单独的进程扫描使用较高的 VisibilityTimeout 并将超时设置为较低的值(甚至不确定这是否可行)。但是,创建一个扫描这些队列项的过程是我首先要避免的,因为如果可能的话,我希望将逻辑保留在队列触发函数中。

我有什么选择?

更新:我认识到我想要完成的事情首先与队列触发函数的目的不一致,因为队列触发事件的原因是在消息出现时执行某些操作,并且如果我想要选择性处理,我可以自己实现队列轮询和消息处理过程。但我正在尝试利用触发处理提供的更高级别的抽象。

最佳答案

我想说;令 Queue 为 Queue,令 FIFO 为 FIFO。

如果您想使用队列来处理条件消息处理,我建议两个选项。

<强>1。使用 Azure 服务总线主题

对于选择性 FIFO 筛选器,可以将 Azure 队列替换为 Azure 服务总线主题。

请参阅教程以获得提示: https://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-service-bus/#topics

<强>2。使用辅助队列

与中毒队列类似,将忽略的队列发送到辅助队列,并稍后在另一种逻辑中处理它们。我推荐这个,因为我们可以轻松理解流程。

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
_secondaryQueue= queueClient.GetQueueReference(storageQueueName);
_secondaryQueue.CreateIfNotExists();

public static void ProcessQueueMessage([QueueTrigger("%MyQueue%")] Item item, TextWriter logger)
{
// send to secondary queue.
await _secondaryQueue.AddMessageAsync(new CloudQueueMessage(JsonConvert.SerializeObject(item)));
}

关于azure - 如何禁用特定队列项目的 Azure Webjob 存储队列处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39920944/

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