1
我使用RabbitMQ(.Net客戶端庫)將WebAPI中的XML消息發佈到隊列中。如果發佈的消息被成功持久保存到磁盤上,則需要發送狀態碼200,否則應返回代碼400。 RabbitMQ客戶端庫提供了兩個單獨的事件來發送ACK或NACK事件,指示消息是否已保存。所以我的發佈函數需要等待兩個事件句柄中的任何一個被調用,然後才返回http響應。根據調用哪個事件處理函數的函數返回值
我該如何做到這一點?
阿比控制器動作
[HttpPost]
public HttpResponseMessage SendSomething()
{
...
bool success = _publisher.Publish(bytes);
if(success) // Send status 200
else // Send status 400
...
}
消息發佈代碼
public bool Publish(byte[] data)
{
..
channel.BasicAcks += OnAck;
channel.BasicNacks += OnNack;
channel.BasicPublish("", "test", null, data);
..
// Depending on if OnAck or OnNack is called I need to return true or false
return ??
}
private void OnNack(IModel model, BasicNackEventArgs args)
{
...
}
private void OnAck(IModel model, BasicAckEventArgs args)
{
...
}
這工作完美。我已經在玩AutoResetEvent,但看不到整個畫面。我喜歡你使用lamda表達。謝謝! :) – maulik13 2015-03-03 11:48:07