NService Bus - Маршрутизация и аудит на основе контента - мой подход в порядке? - PullRequest
2 голосов
/ 05 февраля 2012

У меня есть небольшая проблема, чтобы решить, какой путь выбрать при проектировании потока сообщений в нашей системе.

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

Общий процесс должен выглядеть примерно так: workflow handling process
Интерфейс - это сервис, который подключается к системе клиента через любой интерфейс, предоставляемый клиентом (webservices, tcp).конечные точки, опрос базы данных, файлы, вы называете это).Затем отправляется команда исполнителю, содержащая полученные данные и идентификатор рабочего процесса, который необходимо выполнить.

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

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

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

Вторая проблема приходит, когда мы хотим добавить мониторинг.Поскольку конечная точка может подписаться только на одну очередь для каждого типа сообщений, мы не можем позволить всем исполнителям просто опубликовать сообщение «Я завершил рабочий процесс».Текущее решение будет Bus.Send сообщение в предварительно настроенную конечную точку аудита.Это похоже на мошенничество;)

Есть ли лучший способ снова объединить опубликованные сообщения нескольких работников в одну очередь?Если бы не было проблемы # 1, я думаю, что все работники могли бы использовать одну и ту же очередь ввода, однако это невозможно в этом сценарии.

1 Ответ

1 голос
/ 05 февраля 2012

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

...