0
我已經註冊爲消息隊列處理程序 ServiceStack服務。當服務處理消息並遇到錯誤時,我想從隊列中提取剩餘的消息並將它們發送到不同的隊列。這是我正在嘗試使用的代碼。使用ServiceStack和RabbitMQ的從一個隊列將消息發送到另一個
if (error)
{
using (var mqClient = TryResolve<IMessageFactory>().CreateMessageQueueClient())
{
var callMessage = mqClient.Get<CallMessage>(QueueNames<CallMessage>.In);
while (callMessage != null)
{
mqClient.Ack(callMessage);
PublishMessage(new TextMessage { Text = callMessage.Text });
// Get the next message. Null is returned when the queue is empty
callMessage = mqClient.Get<CallMessage>(QueueNames<CallMessage>.In);
}
}
}
然而,在調用mqClient.Get的CallMessage隊列似乎變得有活性UNACKED消息陷入僵局。
什麼是從隊列中提取消息,並將它們重新發布到不同的隊列中的正確方法?
謝謝@mythz使用GetAsync解決了與獲得阻塞的問題,但它總是返回null。我發現隊列中的所有消息已經在RabbitMq的'Unacked'狀態中出列,所以空結果是有意義的。 ServiceStack是否將消息作爲批處理出隊?我註冊使用handler 「mqServer.RegisterHandler(ServiceController.ExecuteMessage);」 –
jacksonakj
@jacksonakj它僅在從底層C#的RabbitMQ客戶端時間拉出來1,但它確實指定[20 prefetchCount](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack。 RabbitMq/RabbitMqProducer.cs#L40)。 – mythz