Jig*_*eth 10 c# api producer-consumer rabbitmq
while (true)
{
BasicDeliverEventArgs e = (BasicDeliverEventArgs)Consumer.Queue.Dequeue();
IBasicProperties properties = e.BasicProperties;
byte[] body = e.Body;
Console.WriteLine("Recieved Message : " + Encoding.UTF8.GetString(body));
ch.BasicAck(e.DeliveryTag, false);
}
Run Code Online (Sandbox Code Playgroud)
这是我们通过订阅检索消息时所做的事情.我们使用While循环,因为我们希望消费者不断地听...如果我想让这个甚至基于......那就是当时新消息到达队列的时候只有消费者应该消费消息..或任何类似的事件..
使用RabbitMQ.Client.Events.EventingBasicConsumer事件消费者而不是阻止消费者.
您目前正在阻止Consumer.Queue.Dequeue().如果我正确理解您的问题,您希望异步使用消息.
这样做的标准方法是编写自己的IBasicConsumer(可能通过继承DefaultBasicConsumer)并将其设置为通道的使用者.
这样做的麻烦在于你必须非常小心你在IBasicConsumer.HandleBasicDelivery中所做的事情.如果您使用任何同步AMQP方法,例如basic.publish,您将获得死锁.如果你做任何需要很长时间的事情,你会遇到其他一些问题.
如果您确实需要同步方法或长时间运行的操作,那么您正在做的是正确的方法.看看订阅 ; 它是一个消耗消息并将它们放在队列中的IBasicConsumer.
如果您需要更多帮助,那么值得一提的就是rabbitmq-discuss邮件列表.
| 归档时间: |
|
| 查看次数: |
9149 次 |
| 最近记录: |