Rav*_*pta 2 c# algorithm queue azure azure-storage-queues
延迟队列是一个队列,其中每个消息都有一个与之关联的延迟时间,并且只有在其延迟到期时才能获取消息.队列的头部是那个过去延迟到期的消息.如果没有延迟到期,则没有头,而dequeue将返回null.
实际上,我正在使用Azure编写云应用程序,而在Azure中,只有FIFO队列可用,而不是优先级/延迟队列.所以我来到这里看是否有人可以给我一些指示,从我可以从正确的方向开始.我google了很多,但只发现了Java中的延迟队列实现,而没有标准的教程/研究论文,一般性地谈论延迟队列.
编辑:
我有什么代码?
实际上,我必须首先设计这些东西并将它呈现给我的经理,一旦我们完成设计,那么只有我才能开始编码.
关于场景的更多细节
它是基于主/从模型的分布式应用程序.主服务器生成消息并将它们放入Azure Service Bus队列,并且有多个从服务器(在多台计算机上运行)从队列中读取并进行处理.如果主机发生故障,则其中一个从机充当主机并开始生成消息.我不想在主服务器中存储任何状态信息,因为如果主服务器关闭,所有状态信息也将随之而来.
Dav*_*gon 10
Windows Azure队列消息具有在将消息插入队列时指定的延迟(以秒为单位).在达到超时延迟之前,将不会显示消息.请参阅此MSDN文章以查看API详细信息.
隐形超时也在各种语言SDK实现中实现.由于你正在使用C#,这就是AddMessage()
调用的样子.注意第3个参数AddMessage()
指定了不可见性超时:
var acct = CloudStorageAccount.DevelopmentStorageAccount;
var queueClient = acct.CreateCloudQueueClient();
var queue = queueClient.GetQueueReference("myqueue");
queue.CreateIfNotExist();
var msg = new CloudQueueMessage("test message");
queue.AddMessage(msg, TimeSpan.FromHours(2), TimeSpan.FromMinutes(30));
Run Code Online (Sandbox Code Playgroud)