首页 > 解决方案 > 如何在 queueCollector.AddAsync 中设置 VisibilityTimeout?

问题描述

我有一个使用 queueCollector.AddAsync(message) 将消息添加到队列的函数。

我想为每条消息设置一个 VisibilityTimeout。怎么做到呢?

标签: azureazure-storageazure-functions

解决方案


看起来您的函数IAsyncCollector<T>用作输出类型。使用此输出绑定,我们只能输出消息正文,而 visibilityTimeout 等属性由 Azure 存储服务自动设置。

为了控制CloudQueueMessage 的属性,我们可以使用CloudQueue输出类型,即直接绑定到队列。请注意,visibilitytimeouot 不能大于 7 天。

C#预编译代码示例,使用队列触发和输出消息。

public static async Task Run([QueueTrigger("queue-in")]string message, ILogger log, 
    [Queue("queue-out")]CloudQueue outQueue)
{
    // set 3 minutes visibility timeout after being created in the queue
    await outQueue.AddMessageAsync(new CloudQueueMessage(message), null, TimeSpan.FromMinutes(3), null, null);
}

用于在线开发的 C# 脚本示例。

#r "Microsoft.WindowsAzure.Storage"

using System;
using Microsoft.WindowsAzure.Storage.Queue;

public static async Task Run(string message, ILogger log, CloudQueue outQueue)
{
    log.LogInformation($"C# Queue trigger function processed: {message}");
    await outQueue.AddMessageAsync(new CloudQueueMessage(message), null, TimeSpan.FromMinutes(3), null, null);
}

它的function.json

{
  "bindings": [
    {
      "name": "message",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "queue-in",
      "connection": "MyStorageConnection"
    },
    {
      "type": "queue",
      "name": "outQueue",
      "queueName": "queue-out",
      "connection": "MyStorageConnection",
      "direction": "out"
    }
  ]
}

host.json中还有另一个 visibilityTimeout 。如果您想在消息处理失败时设置重试之间的时间间隔,请查看它。


推荐阅读