2015-09-17 6 views
2

Используя Rebus, возможно ли иметь более одного транспорта, настроенного в приложении?Rebus - несколько транспортов

Наш бизнес-домен - это обработка изображений из-за потенциально большого размера обрабатываемых изображений. Я хотел бы использовать транспорт InMemory для связи внутри одной службы (WebApi 2) tokenize (Guid) и сохранять изображения на обрабатываться в базе данных.

Кроме того, после того, как изображения были маркированы, мы хотели бы использовать транспорт RabbitMQ для отправки изображений для обработки в ImageProcessingService (Console App - используя TopShelf) и отвечать на вызывающее приложение (WebApi), как только обработка полный.

Я не могу найти правильный способ обработки сценария, в котором я хотел бы использовать обмен сообщениями в приложении (WebApi) с использованием транспорта InMemory, а также иметь возможность WebApi отправлять в ImageProcessingService через RabbitMQ Transport ,

ответ

1

Очевидно, что я не знаю подробностей вашей проблемы, но вы решили сохранить данные изображения где-то в другом месте (сетевой ресурс, MongoDB GridFS, LOB SQL Server и т. Д.)?

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


PS: Я поэкспериментировать с мультимодального транспорта в какой-то момент, что позволит вам сделать что-то вроде этого:

Configure.With(...) 
    .Transport(c => c.Multi() 
     .Add("amqp", t => t.UseRabbitMq(connStr, "rabbitqueue") 
     .Add("inmem", t => t.UseInMemoryTransport(network, "inmemqueue")) 
    .Start(); 

, а затем указать адреса в форме amqp://rabbitqueue и inmem://inmemqueue, чтобы адресовать сконфигурированную конечную точку через RabbitMQ и in-mem транспорты соответственно.

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

Этот способ обращения оказался поднять кучу вопросов, хотя, это было не так просто ввести.

+0

не представляет собой мультивизуальную передачу с философией Ребуса, чтобы иметь только одну входную очередь? как бы это даже работало - не получилось бы одно сообщение от первого транспорта, одно от второго и т. д. в цикле? Я мог бы предположить, что это можно использовать как .Add ("msmq1") .Add ("msmq2"). Я думаю, что раздельные шины для каждой очереди проще рассуждать о :) – user1121956

+1

Вот что я имел в виду под термином «это поднимает кучу вопросов» ;-), но да, транспортная обертка просто чередуется между получением от каждого завернутого транспорта и обратный адрес будет установлен в список, разделенный точкой с запятой, на весь адрес входной очереди, на котором можно найти конечную точку, + еще кое-что, чтобы связать вещи вместе ... он действительно мог отправлять/получать сообщения, но все равно будет много вопросов :) – mookid8000