在Azure Web作业中,何时删除Azure队列中的项目?

时间:2018-06-02 03:00:19

标签: c# azure azure-servicebus-queues

我使用Azure队列创建了一个触发的Web作业。为简洁起见,我的功能如下:

xx

我有另一个函数将项添加到队列中进行处理。但是,我想检查最后的while (true) { var myMessageId = "98uasd98fusad8"; CloudQueue queue = queueClient.GetQueueReference("myqueue"); queue.CreateIfNotExists(); var maxMessagesToCheck = 99; var oldMessages = queue.GetMessages(maxMessagesToCheck, null); if (!oldMessages.Any(x => x.AsString == myMessageId)) { CloudQueueMessage message = new CloudQueueMessage(myMessageId); queue.AddMessage(message); } } 消息,以确定队列中是否已存在某个项目(具有相同的消息)。像这样:

ProcessQueueMessage

但是,我只是不确定某个项目何时从队列中“弹出”。在处理完成并且 public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log) { //IS THE ITEM IN THE QUEUE POPPED OFF HERE? log.WriteLine(message); System.Threading.Thread.Sleep(10000); } //OR IS THE ITEM IN THE QUEUE POPPED OFF HERE? 函数返回(没有错误)后,是否会弹出?或者,在处理开始时是否会弹出

如果项目在 后弹出处理完成,那么上面的第二个函数将正常工作。但是,如果在流程开始后立即弹出项目,那么我将不得不找到另一种解决方案。

这可能是一种更简洁的提问方式:

AddIdentityCore()

1 个答案:

答案 0 :(得分:0)

根据Microsoft doc

  

当邮件被锁定时,从同一队列或订阅接收的其他客户端可以接受锁定并检索不在活动锁定下的下一个可用邮件。当明确释放对消息的锁定或锁定到期时,消息会在检索订单的前面或附近弹回,以便重新传递。

因此你的解决方案不起作用,假设你有10条消息在队列中,第一条消息当前正由你的第一个函数处理,因此当检查函数运行时它只能查看它后面的消息,让我们说它是批量查看消息2,3,4,与它为三条消息锁定所需的第一个函数相同,所以当第一个函数完成消息1时,它只能接收消息5,它没有检查