如何在 azure 队列触发器中设置 messageTTL?

how can i set messageTTL in an azure queue trigger?

问题:

https://docs.microsoft.com/en-us/rest/api/storageservices/version-2017-07-29 表示 "messagettl" 可以设置为 7 天或 -1 的特定值。
我如何 post 将消息发送到具有自定义超时的队列? (特别是 -1)

背景:

我们通过 posting 到 IAsynCollector 创建消息,类似于 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue#output---c-script-example

中的示例

我们最近处理了大量积压的队列消息,每条消息都包含一个 azure blob 的名称以供处理。

积压的处理时间比预期的要长,一些 blob 没有得到处理。我们认为它们超时是因为没有消息中毒,但队列超时不是记录的事件。

队列头部的 "Expiration Time" 总是超过 1 天,但是由于下游系统过载,我们收到了一些暂时性错误。我认为那些消息排到了队列的后面并超时了。

如果只想设置队列消息过期时间(TTL),也可以将队列绑定到CloudQueue。然后使用AddMessageAsync()方法发布TTL时间跨度的消息。

下面是我的测试代码,如果你想将TTL设置为-1你应该将值设置为TimeSpan.MaxValue它会像-1.

public static class Function1
    {
        public class CustomQueueMessage
        {
            public string PersonName { get; set; }
            public string Title { get; set; }
        }
        [FunctionName("Function1")]
        public static void Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            [Queue("myqueue")]CloudQueue myQueueItems,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            var ms1 = new CustomQueueMessage { PersonName = "You", Title = "None" };
            CloudQueueMessage q1 = new CloudQueueMessage(JsonConvert.SerializeObject(ms1));
            myQueueItems.AddMessageAsync(q1, TimeSpan.FromDays(11),null,null,null);
            CloudQueueMessage q2 = new CloudQueueMessage("test");
            myQueueItems.AddMessageAsync(q2, TimeSpan.MaxValue , null, null,null);
        }
    }