net - rabbitmq c# tutorial español
RabbitMQ C#API Evento basado en el consumo de mensajes (3)
Actualmente estás bloqueando en Consumer.Queue.Dequeue (). Si entiendo tu pregunta correctamente, quieres consumir mensajes de forma asincrónica .
La forma estándar de hacer esto sería escribir su propio IBasicConsumer (probablemente subclasificando DefaultBasicConsumer ) y establecerlo como el consumidor para el canal.
El problema con esto es que debe tener mucho cuidado con lo que hace en IBasicConsumer.HandleBasicDelivery. Si usa métodos AMQP sincrónicos, como basic.publish, obtendrá un bloqueo de bloqueo. Si haces algo que lleva mucho tiempo, te encontrarás con algunos otros problemas.
Si necesita métodos sincrónicos o acciones de larga duración, lo que está haciendo es la forma correcta de hacerlo. Eche un vistazo a la Suscripción ; es un IBasicConsumer que consume mensajes y los coloca en una cola para usted.
Si necesita más ayuda, un gran lugar para preguntar es la lista de correo de rabbitmq-discuss.
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);
}
Esto es lo que hacemos cuando recuperamos el mensaje por suscripción ... Usamos While Loop porque queremos que Consumer lo escuche continuamente ... ¿Qué ocurre si quiero hacer que esto se base en forma pareja ... es cuando llega un nuevo mensaje a la cola en ese momento? solo el consumidor debe consumir el mensaje ... o en cualquier evento similar.
Tuve este problema y no pude encontrar una respuesta, así que creé un proyecto de demostración para que la suscripción de RabbitMQ genere eventos .Net cuando se recibe un mensaje. La suscripción se ejecuta en su propio hilo dejando la UI (en mi caso) libre de hacerlo.
Me resulta divertido llamar a mi proyecto RabbitEar mientras escucha los mensajes del poderoso RabbitMQ. Tengo la intención de compartir esto con el sitio RabbitMQ, así que si creen que es valioso, pueden incluir un enlace / código en los ejemplos.
Échale un vistazo en http://rabbitears.codeplex.com/
Gracias Simon
utilice el RabbitMQ.Client.Events.EventingBasicConsumer
para un consumidor eventing en lugar de uno de bloqueo.