我正在使用带有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”,这很有效。 现在我很好奇,优先级队列的目的是什么?
答案 0 :(得分:1)
这不是人们期望的普通优先级队列。
ServiceStack优先级队列只是另一个队列的另一个工作线程。
即使普通队列收到太多消息并被阻止,它也会得到很好的处理。
您应该只将一些重要的消息放入高优先级队列。
如果在高优先级队列中放入太多消息,则它将比低优先级队列慢。