【问题标题】:Azure queue message priorityAzure 队列消息优先级
【发布时间】:2014-02-08 18:00:15
【问题描述】:

我在 Azure 存储中有一个名为“消息”的队列。每隔 1 小时,一些服务会向这个队列推送一些应该更新数据的消息。但是,在某些情况下,我也会从另一个地方推送到此队列消息,并且我希望立即处理此消息,并且我无法设置此消息的优先级。

这个问题的最佳解决方案是什么? 我可以使用两个不同的队列(“消息”和“消息优先级”)还是一种不好的方法?

【问题讨论】:

  • 使用 Windows Azure 队列,您无法设置优先级消息,因此您唯一的选择是使用 2 个单独的队列。我可以建议您看一下 Windows Azure 服务总线队列吗?我没有亲自使用过它,但我相信它比 Windows Azure 队列功能更丰富。
  • 我也没有使用过 Windows Azure 服务总线队列,但会尝试调查它。

标签: azure azure-storage-queues


【解决方案1】:

正确的方法是使用多个队列 - 一个“正常优先级”和一个“高优先级”队列。我们实现的是单个工作角色中的多个队列读取器线程 - 每个线程首先检查高优先级队列,如果它为空,则查看普通队列。这样,高优先级消息将由第一个可用线程(几乎立即)处理,并且无论消息来自何处,都将运行相同的代码。它还省去了让阅读器连续查看单个队列而不得不退出的情况,因为很少有消息。

【讨论】:

  • 这种方法没有饥饿问题吗?给定足够多的高优先级消息,普通的消息队列永远不会被服务?
  • 好点,但是“高优先级”成为新的“正常”,并且您有一组外部问题导致许多高优先级消息 - 这是一个主要的业务问题或恐慌需要解决。我们的系统记录车辆跟踪数据,“高优先级”用于碰撞检测(将遥测数据发送到紧急服务)。在那种情况下,不可能高优先级会超过正常,除非出现错误或世界即将结束
  • 当你有两个队列并且自动缩放只占一个时,如何在 Azure 中处理缩放?
  • @Jazaret 您在“正常”优先级上自动缩放。见之前的评论。如果您必须自动缩放高优先级,那么您会遇到不同的问题......在这种情况下,您必须将读取器进程排队,而不是可以独立缩放。此技术适用于偶尔的高优先级消息,您不希望单独管理(和扩展)队列读取器的开销
猜你喜欢
  • 2010-10-15
  • 2011-12-20
  • 2013-09-20
  • 2011-09-17
  • 2019-08-12
  • 2015-02-11
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多