- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个队列触发的 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/
我是一名优秀的程序员,十分优秀!