Advertisement
Guest User

Receiver

a guest
Jan 8th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.57 KB | None | 0 0
  1. using RabbitMQ.Client;
  2. using RabbitMQ.Client.Events;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Web.Script.Serialization;
  7.  
  8. class Program
  9. {
  10.     public static void Main()
  11.     {
  12.         var factory = new ConnectionFactory()
  13.         {
  14.             HostName = "gopher.rmq.cloudamqp.com",
  15.             UserName = "ugphijbk",
  16.             Password = "JGX8ywVq53msw8k9JA21r7ejNnRri_DD",
  17.             VirtualHost = "ugphijbk"
  18.         };
  19.         var JS = new JavaScriptSerializer();
  20.         using (var connection = factory.CreateConnection())
  21.         using(var channel = connection.CreateModel())
  22.         {
  23.             IDictionary<string, object> Args = new Dictionary<string, object>();
  24.             Args.Add("x-dead-letter-routing-key", "consulang-routing-dead"); //declarar as rotas configuradas
  25.             Args.Add("x-dead-letter-exchange", "consulang-exchange-dead"); //declarar as rotas configuradas
  26.  
  27.             channel.QueueDeclare(queue: "consulang", durable: true, exclusive: false, autoDelete: false, arguments: Args);
  28.  
  29.             Console.WriteLine(" [*] Waiting for messages.");
  30.  
  31.             var consumer = new EventingBasicConsumer(channel);
  32.             consumer.Received += (model, ea) =>
  33.             {
  34.                 var body = ea.Body;
  35.                 var Msg = new Package();
  36.                
  37.                 Msg = JS.Deserialize<Package>(Encoding.UTF8.GetString(body));
  38.                 Console.WriteLine(" [{2}] Received {0} with ID: {1}", Msg.Message, Msg.Id, ea.RoutingKey);
  39.  
  40.                 EventingBasicConsumer m = (EventingBasicConsumer)model;
  41.                 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
  42.                 m.Model.BasicReject(ea.DeliveryTag, false);//coloca a mensagem que deu erro na queue de dead letter
  43.                 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
  44.  
  45.             };
  46.            
  47.             var res = channel.BasicConsume(queue: "consulang", autoAck: false, consumer: consumer);//auto Acknowledgement a falso, vamos controlar o sucesso ou erro das mensagens
  48.  
  49.             Console.WriteLine(" Press [enter] to exit.");
  50.             Console.ReadLine();
  51.         }
  52.     }
  53. }
  54. public class Package
  55. {
  56.     public string Id { get; set; }
  57.     public string Message { get; set; }
  58.     public bool Status { get; set; }
  59.     public string CreatedAt { get; set; }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement