.NET Core2.2,WebJobs SDK3.0
我有一个网络作业可以接收队列中的消息。像这样的标准QueueTrigger
public void ProcessQueueMessage(
[QueueTrigger("%WebJobs:WorkerQueueName%")] CloudQueueMessage queueMessage,
ILogger log)在流程结束时,我将消息写入另一个队列(归档)。
函数成功完成,但消息保存在源队列中。
在存储资源管理器中,我看到了这一点(在本例中,我有3条消息挂起)

消息在10分钟后再次退出队列。
当我的函数成功时,我如何才能使消息退出队列?
顺便说一下,我的队列配置是
BatchSize 1
MaxDequeueCount 2
MaxPollingInterval 00:00:04
VisibilityTimeout 02:00:00发布于 2020-06-12 13:12:13
结果是,我使用我获得的queueMessage对象作为参数,直接将它放入另一个队列中,这可能会使SDK感到困惑。
public void ProcessQueueMessage(
[QueueTrigger("%WebJobs:WorkerQueueName%")] CloudQueueMessage queueMessage,
ILogger log)因此,我更改了它,并在将它放入另一个队列之前创建了一个新的CloudQueueMessage对象。
var newMessage = new CloudQueueMessage(queueMessage.AsString);现在,当我的函数返回时,消息将正确地从队列中删除。
发布于 2020-06-12 08:44:37
SDK应该已经处理好了。
默认情况下,消息将被租赁(或变得不可见)30秒。如果任务所需时间超过该时间,则将续签租约。除非主机崩溃或函数抛出异常,否则该消息将不可用于该函数的另一个实例。当函数成功完成时,SDK将删除消息。
当从队列中检索消息时,响应包括消息和pop接收值,这是删除消息所必需的。消息不会自动从队列中删除,但在检索完消息后,其他客户端将无法在
visibilitytimeout参数指定的时间间隔内看到该消息。检索消息的客户端将在消息被处理后并在响应的TimeNextVisible元素指定的时间之前删除该消息,该响应元素是根据visibilitytimeout参数的值计算的。将visibilitytimeout的值添加到检索消息的时间,以确定TimeNextVisible的值。
因此,您不需要编写任何用于从队列中删除消息的特殊代码。
https://stackoverflow.com/questions/62333063
复制相似问题