2010-10-19 69 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

相關問題