ServiceStackを使用して、優先順位の高いメッセージが最初にポップされるように、内部優先順位を持つ優先キューを作成したいと思います。ServiceStack RedisMQ実装は、IMessageインターフェイスでlong型の優先度セッターを提供します。Priorityプロパティの値が高いメッセージが最初にキューからポップされると予想されます。私のテストでは、Priority> 0のメッセージはRedis「Mq:MyDto.priorityq」に配置され、他の値はメッセージを通常のキュー「Mq:MyDto.inq」に配置することが示されています。
これは、私が達成しようとしていることを示すサンプルコードです。
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);
}
つまり、Priority = 100のhighPrioMsgを、Priority=1のlowPrioMsgの前にポップする必要があります。ただし、実際には、これらのメッセージはシーケンシャルFIFOの原則に従っているようです。
PriorityQueueの内部優先順位付けで期待どおりに機能するようにServiceStackRedisMQを構成する方法はありますか?
または、通常のキューまたは優先キューのいずれかを使用する唯一の選択肢ですか?その場合、ブール値の代わりに優先度セッターに長い間使用されるのはなぜですか?