如何绕过Azure Queue最长的生存时间?

时间:2013-06-29 23:57:23

标签: azure azure-storage azure-queues

Azure Message Queue消息的最长生存时间为7天。呃为什么?我希望我的消息能够有无限的时间在队列中等待,直到我开始处理它。如果不是因为这个奇怪的7天限制Azure队列对我来说将是一个完美的解决方案。我有一个完整的100TB存储帐户支持我的队列,为什么我不能使用它?

我希望有人有解决此问题的解决方法或解决方案。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

服务总线队列为Brian提供无限的TTL。

您可以通过分割多个SB队列来超过5GB限制。然而,我们发现,达到这个限制的人通常会发现并接近更有用和更具成本效益,因为他们进入存储(即Blob)的任何大型数据项,只有与这些数据项相关的工作进入队列。

这将允许您利用存储的功能来执行逐块上传(使用块blob),然后通过SB队列传达该Blob的存在。处理完作业后,您可以删除数据。

没有很多常见的使用案例,其中队列将超过5GB上限,而且这种模式不是总体上更好的选择。

答案 1 :(得分:1)

您可以查看服务总线队列。我对它们并不是很熟悉,但在某些情况下,它们比存储队列更灵活。您还可以查看其他排队系统(MSMQ,RabbitMQ等),但它们可能不值得在Azure中进行设置。

另一种选择是使用存储表作为队列。然后,您可以支持任何您喜欢的TTL。有一些discussion about doing that here。我确实实现了该系统,它工作正常。如果我有机会,我会尝试发布代码。

答案 2 :(得分:1)

我认为您所指的7天限制是可见性延迟(即消息不可见的时间)

对于生存时间(指定消息将保留在队列中的时间长度),我没有记录的文件限制(如果不是这样,请指向链接)

我的评论基于以下页面http://msdn.microsoft.com/en-us/library/windowsazure/hh563575.aspx

希望这有帮助

答案 3 :(得分:1)

现在,您可以通过在排队邮件时指定-1秒的到期时选择加入无限TTL。这是api-version 2017-07-29的新功能:

  

对于Queue服务,Put Message API现在允许messagettl参数中的生存时间值超过七天。您还可以为此参数指定-1,以指示消息应保留在队列中,直到出列并删除。此参数的默认值仍为七天。

如果你坚持使用早期版本的Azure存储库,我通过重新排列旧邮件解决了这个问题 - 一旦他们6天之后,我在队列中添加了一个副本并删除了原始邮件。