2010-10-19 80 views
0

我有几个消息场景,我需要在c#中使用RabbitMQ 2.1.0的帮助...... 1)我想有一个订阅者正在监听“原始”队列;然后执行一些 预处理并发布新消息,例如“预处理”到相同的 交换。 2)类似于1,但发布到不同的交换您可以在RabbitMQ .Net客户端中处理队列时发布消息吗?

我.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

你对回调的评价是真实的,但它只适用于你对DefaultBasicConsumer进行子类化(或从头开始编写你自己的用户)。

在你的情况下,订阅是消费者,它本身不应该造成任何锁。您拥有的代码很好,因为它只使用Subscription消费者。在这一点上,BasicPublish应该是安全的。

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

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

+0

完美 - 谢谢! – csharp4me 2010-10-20 12:15:41

相关问题