我正在使用ServiceStack MQ(ServiceStack.Aws.Sqs.SqsMqServer v4.0.54)。 我在Windows服務中運行MQ服務器。ServiceStack 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,通過在基類被保護的成員「工人循環,並調用停止上各一個。 (在這種情況下,這個Stop()方法作爲阻塞調用被正確實現,它無限期地等待,直到工作人員完成當前正在處理的任何事情)。
我目前對如何關閉MqServer的理解是否正確?這是一個錯誤還是我誤解了一些東西。
我正在努力解決的問題是IMessageService上的Stop()方法未被阻止。它脈衝後臺線程,然後返回。此時,主線程(進程退出前的Windows服務)無法知道工人何時實際停止。工作人員可能仍處於處理mq消息的過程中。 – xihan
@xihan我在[this commit](https://github.com/ServiceStack/ServiceStack.Aws/commit/36d2b9669fb13c1f2d3adbb83c18342ec41c7a3c)中添加了一個新的'WaitForWorkersToStop()'API,它輪詢直到MQ Status停止。此更改可從v4.0.57 +現在[MyGet上可用](https://github.com/ServiceStack/ServiceStack/wiki/MyGet)獲得。 – mythz