如何在 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);
}
}
问题:
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);
}
}