Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using RabbitMQ.Client;
- using RabbitMQ.Client.Events;
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Web.Script.Serialization;
- class Program
- {
- public static void Main()
- {
- var factory = new ConnectionFactory()
- {
- HostName = "gopher.rmq.cloudamqp.com",
- UserName = "ugphijbk",
- Password = "JGX8ywVq53msw8k9JA21r7ejNnRri_DD",
- VirtualHost = "ugphijbk"
- };
- var JS = new JavaScriptSerializer();
- using (var connection = factory.CreateConnection())
- using(var channel = connection.CreateModel())
- {
- IDictionary<string, object> Args = new Dictionary<string, object>();
- Args.Add("x-dead-letter-routing-key", "consulang-routing-dead"); //declarar as rotas configuradas
- Args.Add("x-dead-letter-exchange", "consulang-exchange-dead"); //declarar as rotas configuradas
- channel.QueueDeclare(queue: "consulang", durable: true, exclusive: false, autoDelete: false, arguments: Args);
- Console.WriteLine(" [*] Waiting for messages.");
- var consumer = new EventingBasicConsumer(channel);
- consumer.Received += (model, ea) =>
- {
- var body = ea.Body;
- var Msg = new Package();
- Msg = JS.Deserialize<Package>(Encoding.UTF8.GetString(body));
- Console.WriteLine(" [{2}] Received {0} with ID: {1}", Msg.Message, Msg.Id, ea.RoutingKey);
- EventingBasicConsumer m = (EventingBasicConsumer)model;
- m.Model.BasicReject(ea.DeliveryTag, true); //volta a colocar a mensagem na queue original. Perigo, se o problema está no conteudo da msg, o serviço entra em loop
- m.Model.BasicReject(ea.DeliveryTag, false);//coloca a mensagem que deu erro na queue de dead letter
- m.Model.BasicAck(ea.DeliveryTag, false);//após integrar a mensagem corretamente, enviar sinal ao Rabbit de que a msg foi corretamente consumida. Funciona como uma transação
- };
- var res = channel.BasicConsume(queue: "consulang", autoAck: false, consumer: consumer);//auto Acknowledgement a falso, vamos controlar o sucesso ou erro das mensagens
- Console.WriteLine(" Press [enter] to exit.");
- Console.ReadLine();
- }
- }
- }
- public class Package
- {
- public string Id { get; set; }
- public string Message { get; set; }
- public bool Status { get; set; }
- public string CreatedAt { get; set; }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement