您可以在RabbitMQ .Net客户端中处理队列时发布消息吗?

时间:2010-10-19 21:04:54

标签: .net message-queue rabbitmq

我有几个消息传递方案我需要帮助在c#中使用RabbitMQ 2.1.0 ... 1)我希望订阅者收听“原始”队列;然后做一些 预处理并发布新消息,例如“预处理”到同一消息 交换。 2)类似于1但发布到不同的交易所

我在.Net客户端用户指南中注意到它说不要打电话 .basicPublish在回调期间阻止线程。

using (IConnection conn = connectionFactory.CreateConnection())
{
    using (IModel model = conn.CreateModel())
    {
        var sub = new Subscription(model, "rtls");
        foreach (BasicDeliverEventArgs iter in sub)
        {
            var message = System.Text.Encoding.UTF8.GetString(iter.Body);
            //do stuff and build up a new message
            //possibly create a new connection?
            //  ***.BasicPublish(new message);

            sub.Ack(iter);
        }

    }
}

我想在我之前成功处理并发布新消息 在原始消息上发送ack();所以我确定每条消息都是 处理。

这是正确的处理方式还是会导致线程问题?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你对回调的看法是正确的,但它只适用于你继承DefaultBasicConsumer(或从头开始编写你自己的消费者)。

在您的情况下,订阅是消费者,它不应该自己导致任何锁定。您拥有的代码很好,因为它只使用Subscription使用者。那时BasicPublish应该是安全的。

您的代码也恰好是(或多或少)我们的Subscriber示例。

另外,抱歉没有回答关于rabbitmq-discuss。