2014-09-14 2 views
0

Я просто делаю проект по RabbitMQ, мой фрагмент кода чуть ниже код для производителяИспользование объявляя Обмен в RabbitMQ

public static void Main() 
{ 
    var factory = new ConnectionFactory() { HostName = "localhost" }; 
    using (var connection = factory.CreateConnection()) 
    { 
     using (var channel = connection.CreateModel()) 
     { 
      channel.QueueDeclare("hello", false, false, false, null); 

      string message = "Hello World!"; 
      var body = Encoding.UTF8.GetBytes(message); 

      channel.BasicPublish("", "hello", null, body); 
      Console.WriteLine(" [x] Sent {0}", message); 
     } 
    } 
} 

код для потребителя с обменом объявил

public static void Main() 
{ 
    var factory = new ConnectionFactory() { HostName = "localhost" }; 
    using (var connection = factory.CreateConnection()) 
    { 
     using (var channel = connection.CreateModel()) 
     { 
      channel.ExchangeDeclare("hello", "direct",false, false, false, null); 
      channel.QueueDeclare("hello", false, false, false, null); 

      var consumer = new QueueingBasicConsumer(channel); 
      channel.BasicConsume("hello", true, consumer); 

      Console.WriteLine(" [*] Waiting for messages." + 
            "To exit press CTRL+C"); 
      while (true) 
      { 
       var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); 

       var body = ea.Body; 
       var message = Encoding.UTF8.GetString(body); 
       Console.WriteLine(" [x] Received {0}", message); 
      } 
     } 
    } 

Код для потребителя без Биржи объявлен

public static void Main() 
{ 
    var factory = new ConnectionFactory() { HostName = "localhost" }; 
    using (var connection = factory.CreateConnection()) 
    { 
     using (var channel = connection.CreateModel()) 
     { 
      channel.QueueDeclare("hello", false, false, false, null); 

      var consumer = new QueueingBasicConsumer(channel); 
      channel.BasicConsume("hello", true, consumer); 

      Console.WriteLine(" [*] Waiting for messages." + 
            "To exit press CTRL+C"); 
      while (true) 
      { 
       var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); 

       var body = ea.Body; 
       var message = Encoding.UTF8.GetString(body); 
       Console.WriteLine(" [x] Received {0}", message); 
      } 
     } 
    } 

как потребитель код работает хорошо, то, что главное использование объявляя обмена? .Я так растерялся, может ли один разъяснить мне

ответ

6

Издание для очередей позволяет вам реализовать только основной публикации-подписки сценариев, где производитель и потребитель используют точную очередь. В случае нескольких потребителей одна очередь сообщений распределяется между несколькими потребителями.

Публикация в обмен позволяет создавать сложные сценарии, из-за маршрутизацией между биржами и очередями.

Например, обмен вентиляцией направляет сообщения всем связанным очередям. Таким образом, у вас может быть один производитель и несколько потребителей, и каждое сообщение скопировано во все связанные очереди независимо и независимо.

Другой пример обмене, тему обмена маршрутизацию сообщений в связанных очередей на основе маршрутизации ключа в сообщении и рисунком на очереди. Это представляет интересную возможность отправки сообщений и предоставления их условно.

Для полного ведения видов обмена и их профилей, обратитесь к документации:

https://www.rabbitmq.com/tutorials/amqp-concepts.html

https://www.rabbitmq.com/getstarted.html

Смежные вопросы