NServiceBus - несколько конечных точек, обрабатывающих одно и то же сообщение - PullRequest
0 голосов
/ 01 октября 2019

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

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

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

1 Ответ

0 голосов
/ 03 октября 2019

Вы используете шаблон Competing Consumer, который является отличным шаблоном!

https://www.enterpriseintegrationpatterns.com/patterns/messaging/CompetingConsumers.html https://docs.microsoft.com/en-us/azure/architecture/patterns/competing-consumers

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

Недавно мы написали статью в блоге о некоторых новых функциях вNServiceBus, чтобы лучше включить это: https://particular.net/blog/multi-tenancy-support-in-sql-persistence

Вы должны иметь возможность предоставить собственный код и пользовательские строки подключения (для конкретных баз данных клиентов), чтобы включить многопользовательский режим. В зависимости от того, что вы используете, то есть. У нас есть документация для SQL Server и другие персистенции, а также примеры, в которых объясняется, как внедрить компоненты, учитывающие интересы арендаторов, в обработчики сообщений или распространять информацию об арендаторах в конечные точки нисходящего потока .

Надеюсь, это поможет.

ОБНОВЛЕНИЕ Я не уверен, что это лучшее решение, могут быть и другие, но вы можете использовать SendOptions для маршрутизации вконкретная логическая конечная точка , но также и конкретный экземпляр конечной точки .

...