ServiceStack的RabbitMQ服务器中优先级队列的目的是什么?

时间:2014-08-12 14:20:52

标签: servicestack rabbitmq

我正在使用带有Rabbit MQ Server的ServiceStack,并发现通过ServiceController.ExecuteMessage处理程序处理的服务消息使用两个线程处理,即使“noOfThreads = 1”。这是我如何注册处理程序:

container.Register<IMessageService>(c => new RabbitMqServer());
var mqServer = (RabbitMqServer)container.Resolve<IMessageService>();
mqServer.RegisterHandler<CallBatchMessage>(ServiceController.ExecuteMessage, noOfThreads: 1);

我在下面找到了Priority Queue in the documentation

  

“启动MQ服务器为每个处理程序生成2个线程,一个用于侦听消息收件箱mq:Hello.inq,另一个用于侦听位于mq:Hello.priorityq的优先级队列。

     

注意:您可以通过设置mqServer.DisablePriorityQueues = true来列出要为mqServer.PriortyQueuesWhitelist启用优先级队列的消息,或者将其全部禁用。“

我希望只有一个线程来处理队列,所以我使用了“mqServer.DisablePriorityQueues = true”,这很有效。 现在我很好奇,优先级队列的目的是什么?

1 个答案:

答案 0 :(得分:1)

这不是人们期望的普通优先级队列。

ServiceStack优先级队列只是另一个队列的另一个工作线程。

即使普通队列收到太多消息并被阻止,它也会得到很好的处理。

您应该只将一些重要的消息放入高优先级队列。

如果在高优先级队列中放入太多消息,则它将比低优先级队列慢。