2015-05-10 3 views
2

Я уже несколько недель смотрю на MassTransit, и мне любопытно о возможностях. Тем не менее, я, похоже, не в состоянии правильно понять концепции.Публикация сообщения с использованием ключа обмена и маршрутизации с использованием MassTransit

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

Когда я попытался использовать такую ​​же логику, используя MassTransit для лучшей масштабируемости. Я обнаружил, что MassTransit создает собственный обмен на основе имени очереди с типом разветвления.

Классический код опубликовать сообщение путем обмена и маршрутизации ключ

using (var connection = factory.CreateConnection()) 
     { 
      using (var channel = connection.CreateModel()) 
      { 
       channel.ExchangeDeclare(exchange, "direct"); 

       var body = Encoding.UTF8.GetBytes(message); 

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

Есть ли способ настроить прямую или тему обмена с routingkey в MassTransit?

ответ

1

Это не поддерживаемый сценарий с MassTransit. MassTransit всегда будет создавать очередь разветвления. Если вы сами управляете своей топологией, вы можете использовать IEndpoint.Send, чтобы напрямую отправить сообщение на созданную вами биржу. В этом случае вы отказываетесь от того, что MT предоставляет.

Я также не уверен, что означает «лучшая масштабируемость» в этом случае. Обменянные обмены выполняются лучше, чем прямые обмены (в большинстве случаев), поскольку нет логики маршрутизации, которую необходимо обработать.

Возможно, если вы разъясняете свои проблемы с производительностью на MassTransit mailing list, мы могли бы помочь вам немного больше.

+0

Спасибо за ваши комментарии. Моему процессу понадобилось бы несколько издателей для публикации сообщений параллельно, поэтому они думали о «прямых» или «тематических» обменах, но они не поддерживаются в MassTransit. У вас есть предложения по наилучшему способу справиться с этим или вы предпочитаете использовать несколько очередей для этого процесса. Кроме того, было бы полезно, если бы вы направили меня к архитектуре MassTransit. – Syed

+0

http://masstransit.readthedocs.org/en/master/ является основной документацией. – Travis

+0

Я не совсем уверен, что вы пытаетесь сделать. Публикация сообщений параллельно не имеет для меня никакого смысла. С MT 3.0 вы можете публиковать асинхронные сообщения. Однако все более или менее параллельно с обменом сообщениями. Если один поток публикуется, значит, другой. То же самое с потреблением. – Travis

2

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

Ключевой подход маршрутизации менее эффективен при использовании RabbitMQ, который предпочитает использовать биржу для упрощения маршрутизации сообщений (без поддержки хэш-таблиц).

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