使用ServiceStack和RabbitMQ将消息从一个队列发送到另一个队列

时间:2014-07-08 22:45:04

标签: servicestack rabbitmq

我已将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消息而死锁。

enter image description here

从队列中提取消息并将其重新发布到不同队列的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您希望使用IMessageQueueClient.GetAsync从队列中检索消息,如果没有其他消息未决,则会返回下一条消息或null

IMessageQueueClient.Get是一个同步阻塞Get会阻塞,直到收到消息或者可选超时已经过去,如果没有给出超时,它将永远阻塞,直到收到消息。