我有几个消息传递方案我需要帮助在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();所以我确定每条消息都是 处理。
这是正确的处理方式还是会导致线程问题?
感谢您的帮助!
答案 0 :(得分:1)
你对回调的看法是正确的,但它只适用于你继承DefaultBasicConsumer(或从头开始编写你自己的消费者)。
在您的情况下,订阅是消费者,它不应该自己导致任何锁定。您拥有的代码很好,因为它只使用Subscription使用者。那时BasicPublish应该是安全的。
您的代码也恰好是(或多或少)我们的Subscriber示例。
另外,抱歉没有回答关于rabbitmq-discuss。