我已将ServiceStack服务注册为消息队列处理程序。当服务正在处理消息并且遇到错误时,我想从队列中提取剩余的消息并将它们发送到不同的队列。这是我试图使用的代码。
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消息而死锁。
从队列中提取消息并将其重新发布到不同队列的正确方法是什么?
答案 0 :(得分:1)
您希望使用IMessageQueueClient.GetAsync
从队列中检索消息,如果没有其他消息未决,则会返回下一条消息或null
。
IMessageQueueClient.Get
是一个同步阻塞Get会阻塞,直到收到消息或者可选超时已经过去,如果没有给出超时,它将永远阻塞,直到收到消息。