我想創建一個具有內部優先級的優先級隊列,以便使用ServiceStack首先彈出較高優先級的messags。 ServiceStack RedisMQ實現提供了一個優先類型長設置其IMessage接口。我期望在優先級屬性上以較高值發送的消息將首先從隊列中彈出。我的測試表明,有Priority> 0的消息被置於Redis「Mq:MyDto.priorityq」上,而任何其他值將消息置於隊列「Mq:MyDto.inq」中的正常值。RedisMQ中的Servicestack內部優先級PriorityQueue
這是一些示例代碼說明什麼,我試圖完成:
using (var producer = MsgFactory.CreateMessageProducer())
{
var lowPrioMsg = new Message<MyDto>(lowPrioDto);
lowPrioMsg = (long)1;
producer.Publish<MyDto>(lowPrioMsg);
var highPrioMsg = new Message<MyDto>(highPrioDto);
highPrioMsg.Priority = (long)100;
producer.Publish<MyDto>(highPrioMsg);
}
換句話說,我希望highPrioMsg與優先級= 100到lowPrioMsg與之前被彈出優先權= 1。然而,在實踐中,這些信息似乎遵循先進先出原則。
有沒有一種方法可以配置ServiceStack的RedisMQ工作,因爲我期望與PriorityQueue內部優先級?
或者是我使用普通隊列還是優先隊列的唯一選擇?在這種情況下,爲什麼long用於優先級 setter而不是布爾值?
好的,很好的答案。謝謝! –