ServiceStack MQ服务器关闭不等待工作线程后台线程完成

时间:2016-04-23 00:38:23

标签: servicestack

我正在使用ServiceStack MQ(ServiceStack.Aws.Sqs.SqsMqServer v4.0.54)。 我正在Windows服务中运行MQ服务器。

我的目标:   当Windows服务即将关闭时,我想   等待所有正在运行的工作程序完成处理然后终止   MqServer。

问题:   ServiceStack MqServer(无论是Redis / RabbitMq / Sqs)都有Stop()方法。但在所有工人完成工作之前,它不会阻止。它只是   脉冲后台线程停止工人然后它返回。   然后Windows服务进程停止,现有工作程序将中止。   这是github源代码的链接 - > https://github.com/ServiceStack/ServiceStack/blob/75847c737f9c0cd9f5dd4ea3ae1113dace56cbf2/src/ServiceStack.RabbitMq/RabbitMqServer.cs#L451

临时解决方法:   我将SqsMqServer子类化,循环遍历基类中受保护的成员'workers',并在每个上调用Stop。 (在这种情况下,这个Stop()方法作为阻塞调用正确实现。它会无限期地等待,直到工作人员完成当前正在处理的任何工作)。

我目前对如何关闭MqServer的理解是正确的吗?这是一个我误解的错误。

1 个答案:

答案 0 :(得分:1)

SqsMqServer的源代码保存在ServiceStack.Aws存储库中。

Stop() method会发出StopWorkerThreads()并经过stops all workers的bg主题。