我想创建一个具有内部优先级的优先级队列,以便首先使用 ServiceStack 弹出优先级更高的消息。ServiceStack RedisMQ 实现在其IMessage接口上提供了long类型的Priority setter 。我希望在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 =1的lowPrioMsg之前弹出具有Priority=100的highPrioMsg。然而,在实践中,这些消息似乎遵循顺序 FIFO 原则。
有没有一种方法可以配置 ServiceStack RedisMQ 以在 PriorityQueue 中使用内部优先级按预期工作?
或者我唯一的选择是使用普通队列还是优先队列?在那种情况下,为什么优先级设置器使用long而不是布尔值?