Поддерживает ли MassTransit транспорт MSMQ через HTTP?

Передача HTTP доступна с MSMQ 3.0, однако я боюсь, что MassTransit не предлагает функцию использования протокола HTTP в качестве транспортного протокола между очередями.

Есть очень похожий вопрос об этом здесь, который полностью не ответил.

Кто-нибудь знает, возможно ли для клиента подписаться на шину и отправлять/получать сообщения через HTTP? Вот архитектура, которую я хочу реализовать:

У меня будет 2 компьютера в локальной сети

  • Компьютер A запускает серверное приложение и MassTransit.RuntimeServices.
  • Компьютер B запускает клиентское приложение, которое отправляет сообщения на A

Я хочу, чтобы связь между ними осуществлялась через http.

Я пытался изменить адрес в UseSubscriptionService на http вместо msmq, но это не работает. Если установить для службы MSMQ компьютера A усиленный режим, клиентское приложение, работающее на компьютере B, получит тайм-аут при попытке подписаться на mt_subscriptions.

Bus.Initialize(sbc =>
            {
                sbc.UseMsmq();
                sbc.VerifyMsmqConfiguration();
                sbc.UseMulticastSubscriptionClient();
                sbc.ReceiveFrom("msmq://localhost/test_queue_client");
                sbc.UseSubscriptionService("msmq://m3-dev1/mt_subscriptions"); // maybe I could use http instead of msmq, but it doesn't work
            });

Любые подсказки по этому поводу??


person fvdalcin    schedule 24.10.2013    source источник


Ответы (2)


Нет, MassTransit не поддерживает HTTP для MSMQ. Теоретически вы можете добавить свой собственный транспорт, который поддерживает это. RabbitMQ — это лучший транспорт, чем MSMQ, во всех отношениях, за исключением случаев, когда вам нужно зарегистрироваться в распределенных транзакциях. И RabbitMQ требует только одного открытого порта между ящиками.

person Travis    schedule 24.10.2013
comment
Хорошо, это то, о чем я думал. Но мне также было интересно, есть ли причина, по которой MassTransit не поддерживает транспорт MSMQ через HTTP. Насколько я знаю, довольно легко отправлять сообщения в удаленную очередь через HTTP с помощью MSMQ (просто изменив строку адреса), однако вы не можете получать сообщения из удаленной очереди через HTTP. Однако MassTransit использует локальные очереди на каждом хосте для получения сообщений, так что не было бы способа реализовать это без особых проблем в MassTransit? И, к сожалению, я не могу использовать RabbitMQ... - person fvdalcin; 24.10.2013
comment
Да, я понимаю, что не могу использовать RMQ. Извините :(. Таким образом, вы можете реализовать отправку через HTTP, но на самом деле это не так, как работает MT. Как я уже сказал, вы можете реализовать/повторно внедрить транспорт MSMQ для использования HTTP для отправки. Это просто не то, что мы когда-либо делали. необходимо поддерживать и не так надежен. - person Travis; 24.10.2013

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

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

Имея собственный контракт и транспорт http/https, мы не зависим от фактической шины сообщений в середине. И это окупается тем, что мы использовали другой автобус примерно 2 года, а 2 года назад мы перешли на автобус на основе общественного транспорта без ЛЮБЫХ изменений в клиентах (издателях/подписчиках).

person Wiktor Zychla    schedule 24.10.2013
comment
Похоже, путь. Я также хочу, чтобы приложение было независимым в отношении шины сообщений, чтобы его можно было легко изменить при необходимости. - person fvdalcin; 25.10.2013
comment
Фактически, этот подход дает вам большую свободу в реализации портов ввода и вывода с мерами безопасности, которые вы полностью контролируете. Например, мы реализовали безопасность на уровне сообщений для нашего порта веб-сервиса. Сообщения подписаны, и принимаются только подписанные сообщения. Поскольку пение исполняется на границе въезда и выезда, фактический поток внутри автобуса даже не должен включать охрану - автобус недоступен снаружи. - person Wiktor Zychla; 25.10.2013
comment
Таким же образом мы делаем интеграцию и с другими системами. Я думаю, это хороший подход. Кроме того, служба ввода буквально ничего не делает, кроме как отправляет сообщение в очередь, поэтому служба всегда отвечает. - person Travis; 25.10.2013