2013-03-11 2 views
2

Мне нужен способ публикации сообщений неизвестному числу подписчиков. Сообщения должны быть долговечными/сохраняться и классифицироваться в три приоритета (высокий, средний и низкий). Один из абонентов может обрабатывать только ограниченную нагрузку, а некоторые сообщения более важны. Перфорированные сообщения с высоким приоритетом, обработанные в первую очередь и т. Д.Pub/sub с прочными сообщениями с Rebus

Как это сделать с помощью Rebus? Наверное, мне нужно три очереди на каждого абонента?

Где я могу найти пример публикации/подписки с прочными очередями и MSMQ?

ответ

2

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

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

В действительности, подписчики инициируют беседу pub/sub, выдавая SubscriptionMessage (который можно рассматривать как запрос на подписку), после чего издатель публикует некоторое количество событий (которые можно рассматривать как «ответы на подписку»,). «Автобусная часть» издателя отслеживает, кто подписался на какой-либо конкретный тип события.

До сих пор так хорошо.

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

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

Я знаю, что MSMQ поддерживает какой-то приоритет в сообщениях, так что я предполагаю, что это может поддерживаться наличием MsmqMessageQueue понимать определенные заголовки (подобно тому, как экспресс-доставки и время, чтобы быть принят реализованы - см here) - запросы на тягу с радостью принимаются и настоятельно рекомендуется :)

+0

Нужно ли настраивать конечную точку для каждого абонента? Где хранятся сообщения для подписчиков? Не удалось найти примерную реализацию. Я рассмотрю приоритет сообщений MSMQ. – Lybecker

+0

Сообщения для подписчиков хранятся в очереди ввода каждого абонента. Издатель отправляет копию непосредственно (*) каждому отдельному подписчику при публикации. – mookid8000

+0

*) И «прямо», я имею в виду с MSMQ store-and-forward, поэтому он полностью безопасен :) – mookid8000

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