我有一个使用queueCollector.AddAsync(message)将消息添加到队列中的函数。
我想为每条消息设置一个VisibilityTimeout。怎么办?
答案 0 :(得分:1)
好像您的函数使用IAsyncCollector<T>
作为输出类型。使用此输出绑定,我们只能输出消息正文,并且Azure存储服务会自动设置诸如visibleityTimeout之类的属性。
要控制CloudQueueMessage的属性,我们可以使用CloudQueue
作为输出类型,即直接绑定到Queue。请注意,可见性时间不能超过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中还有一个visibleTimeout超时。如果要设置消息处理失败时重试之间的时间间隔,请查看一下。