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