我在Azure存储中有一个队列,例如'messages'。每隔1小时,一些服务会向此队列推送一些应该更新数据的消息。但是,在某些情况下,我也从另一个地方推送到此队列消息,我希望此消息立即进行,我无法为此消息设置优先级。
这个问题的最佳解决方案是什么? 我可以使用两个不同的队列(“消息”和“消息优先级”),还是一个糟糕的方法?
答案 0 :(得分:8)
正确的方法是使用多个队列 - “普通优先级”和“高优先级”队列。我们实现的是单个工作者角色中的多个队列读取器线程 - 每个线程首先检查高优先级队列,如果它是空的,则查看正常队列。这样,高优先级消息将由第一个可用线程处理(几乎立即),并且无论消息来自何处,相同的代码都会运行。它还节省了必须让读者连续查看单个队列并且因为很少有消息而必须退出的情况。