.net 如何在Azure存储队列中将VisibilityTimeout设置为无限期并手动触发消息再现

enxuqcxy  于 2023-05-30  发布在  .NET
关注(0)|答案(2)|浏览(90)

收到消息后,是否可以将visibilityTimeout设置为indefinite,手动触发消息重新出现?
这样做的原因是我的应用程序在删除消息之前会处理它,它完成的时间可能会有很大的不同。我需要确保我不会重复处理同一条信息。
我使用C#和.NET Core作为我的应用程序。

disbfnqx

disbfnqx1#

在我们的应用程序中,我们使用了下一种方法
1.收到消息
1.启动后台Timer扩展消息可见性为另一个60s(见示例)
1.在主线程中完成工作
1.如果作业成功完成-取消Timer并从队列中删除消息
1.如果作业失败,那么我们停止计时器,但不删除消息,使其可见,并给予一次
1.经过一定次数的重试-删除消息
与Sampath的答案的主要区别是,您不需要等到7天或任何其他预定义的时间间隔结束。它还实现了重试策略

n6lpvg4x

n6lpvg4x2#

AFAIK,时间范围在0604800之间,即:0秒至7天。我已经提到了Azure队列存储的MSDOC。和git reference @SreedharPelluru。

string connectionString = "connectionstring";
     QueueClient queueClient = new QueueClient(connectionString, "QueueName");
     queueClient.CreateIfNotExists();       
     queueClient.SendMessage("Hello, World!");
     QueueMessage message = queueClient.ReceiveMessage();
  queueClient.UpdateMessage(message.MessageId, message.PopReceipt, message.MessageText, TimeSpan.FromDays(7));
   Console.WriteLine("Press any key to exit...");
            Console.ReadLine();

输出:

注:

相关问题