webjob QueueTrigger不会从队列中删除消息

问题描述 投票:0回答:1

。NET Core 2.2,WebJobs SDK 3.0

我有一个网络作业,它从队列中接收消息。像这样的标准QueueTrigger

public void ProcessQueueMessage(
              [QueueTrigger("%WebJobs:WorkerQueueName%")] CloudQueueMessage queueMessage, 
              ILogger log)

在过程结束时,我将消息写入另一个队列(存档)。

该函数成功完成,但是消息保留在源队列中

在Storage Explorer中,我看到了这个(在此示例中,我有3条待处理的消息)

enter image description here

消息在10分钟后再次出队。

如何使它成功运行,以便使消息出队?

顺便说一下,我的队列配置是

BatchSize             1  
MaxDequeueCount       2  
MaxPollingInterval    00:00:04  
VisibilityTimeout     02:00:00
azure azure-webjobs azure-webjobssdk
1个回答
0
投票

默认情况下,该消息将被租用(或变得不可见)30秒。如果作业花费的时间长于该时间,则该租约将被续签。除非主机崩溃或该函数引发异常,否则该消息对其他函数实例将不可用。功能成功完成后,SDK将删除该消息。

当从队列中检索到一条消息时,响应包括该消息和一个弹出收据值,这是删除该消息所必需的。在visibilitytimeout参数指定的时间间隔内,

消息不会自动从队列中删除,但是在检索之后,其他客户端看不到它]。检索消息的客户端应在处理完消息之后,然后在响应的TimeNextVisible元素指定的时间之前删除该消息,该时间是根据visibilitytimeout参数的值计算的。将visibilitytimeout的值添加到检索消息的时间,以确定TimeNextVisible的值。

因此,您无需编写任何特殊代码即可从队列中删除消息。有关更多详细信息,您可以参考此article和此one

© www.soinside.com 2019 - 2024. All rights reserved.