收到消息后,是否可以将visibilityTimeout设置为indefinite,手动触发消息重新出现?这样做的原因是我的应用程序在删除消息之前会处理它,它完成的时间可能会有很大的不同。我需要确保我不会重复处理同一条信息。我使用C#和.NET Core作为我的应用程序。
disbfnqx1#
在我们的应用程序中,我们使用了下一种方法1.收到消息1.启动后台Timer扩展消息可见性为另一个60s(见示例)1.在主线程中完成工作1.如果作业成功完成-取消Timer并从队列中删除消息1.如果作业失败,那么我们停止计时器,但不删除消息,使其可见,并给予一次1.经过一定次数的重试-删除消息与Sampath的答案的主要区别是,您不需要等到7天或任何其他预定义的时间间隔结束。它还实现了重试策略
Timer
60s
n6lpvg4x2#
AFAIK,时间范围在0到604800之间,即:0秒至7天。我已经提到了Azure队列存储的MSDOC。和git reference @SreedharPelluru。
0
604800
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();
输出:
注:
2条答案
按热度按时间disbfnqx1#
在我们的应用程序中,我们使用了下一种方法
1.收到消息
1.启动后台
Timer
扩展消息可见性为另一个60s
(见示例)1.在主线程中完成工作
1.如果作业成功完成-取消
Timer
并从队列中删除消息1.如果作业失败,那么我们停止计时器,但不删除消息,使其可见,并给予一次
1.经过一定次数的重试-删除消息
与Sampath的答案的主要区别是,您不需要等到7天或任何其他预定义的时间间隔结束。它还实现了重试策略
n6lpvg4x2#
AFAIK,时间范围在
0
到604800
之间,即:0秒至7天。我已经提到了Azure队列存储的MSDOC。和git reference @SreedharPelluru。输出:
注: