Azure 消息队列消息的最长生存时间为 7 天。呃,为什么?我希望我的消息有无限的时间在队列中等待,直到我有时间处理它。如果不是因为这个奇怪的 7 天限制,Azure 队列对我来说将是一个完美的解决方案。我有一个完整的 100TB 存储帐户支持我的队列,为什么我不能使用它?
我希望有人对这个问题的解决方法或解决方案有想法。有任何想法吗?
Azure 消息队列消息的最长生存时间为 7 天。呃,为什么?我希望我的消息有无限的时间在队列中等待,直到我有时间处理它。如果不是因为这个奇怪的 7 天限制,Azure 队列对我来说将是一个完美的解决方案。我有一个完整的 100TB 存储帐户支持我的队列,为什么我不能使用它?
我希望有人对这个问题的解决方法或解决方案有想法。有任何想法吗?
正如 Brian 指出的那样,服务总线队列为您提供无限的 TTL。
您可以通过跨多个 SB 队列分片来超过 5GB 的限制。然而,我们发现,达到该限制的人通常会发现并接近更有用和更具成本效益的方法,无论他们拥有的任何大数据项进入存储(即 Blob),只有与这些相关的作业进入队列。
这将允许您利用存储的能力进行逐块上传(使用块 blob),然后通过 SB 队列传达该 blob 的存在。处理完作业后,您可以删除数据。
队列超过 5GB 上限的常见用例并不多,而且这种模式并不是总体上更好的选择。
现在,您可以通过在对消息进行排队时指定 -1 秒的到期时间来选择无限 TTL。这是 api-version 2017-07-29 的新功能:
对于队列服务,Put Message API 现在允许 messagettl 参数中的生存时间值超过 7 天。您还可以为此参数指定 -1 以指示消息应保留在队列中,直到出队和删除。此参数的默认值仍为 7 天。
如果您被较早版本的 Azure 存储库困住,我通过重新排队旧消息解决了这个问题 - 一旦它们存在 6 天,我将副本添加到队列中并删除了原始消息。
我认为您所指的 7 天限制是可见性延迟(即消息不可见的时间)
对于生存时间(指定消息将在队列中保留多长时间),没有我知道的记录限制(如果不是这种情况,请指向一个链接)
我的评论基于以下页面http://msdn.microsoft.com/en-us/library/windowsazure/hh563575.aspx
希望这可以帮助
您可能会查看服务总线队列。我对它们不是很熟悉,但在某些情况下它们比存储队列更灵活。您还可以查看其他排队系统(MSMQ、RabbitMQ 等),但它们可能不值得在 Azure 中进行设置。
另一种选择是将存储表用作队列。然后,您可以支持任何您喜欢的 TTL。这里有一些关于这样做的讨论。我确实实现了该系统,并且运行良好。如果有机会,我会尝试发布代码。