Я изучаю использование служебной шины Azure для публикации / доставки сообщений между различными службами в нашем приложении и пытаюсь найти достойный дизайн для темы и подписок в пространстве имен служебной шины.
Система предназначена для того, чтобы service-a
опубликовала сообщение с типом service-a.test-event
на шине, и чтобы любая служба, прослушивающая этот тип события, доставила сообщение. Это будет довольно низкая громкость
Я немного не понимаю, какой из следующих дизайнов использовать:
- В пространстве имен служебной шины есть одна тема
events
, куда доставляются все сообщения от всех служб. Любая служба, подписывающаяся на события от любой другой службы, создает подписку в этом разделе, используя фильтры для получения нужных им типов сообщений - по одной подписке на тип сообщения (например,service-b-service-a-test-event
). - Пространство имен служебной шины имеет одну тему для каждого издателя (например,
events-service-a
). Любая служба подписки на события из этой службы создает подписку в теме, используя фильтры для получения нужных им типов сообщений - по одной подписке на тип сообщения (например,service-b-test-event
).
Похоже, что служебная шина имеет ограничение в 2000 подписок на тему, чего, насколько я могу судить, для нас будет достаточно. Если бы у меня были подозрения в противном случае, вариант № 2, вероятно, был бы лучшим выбором (поскольку у меня может быть 10 000 тем на пространство имен). Насколько я могу судить, ни одно из других ограничений служебной шины не влияет на то, какой из этих вариантов мне следует выбрать.
Еще одно дополнительное требование: я хочу, чтобы служба подписывалась на любое событие из любой службы по причинам записи. Если бы я выбрал вариант №1, это было бы очень просто реализовать. Однако для варианта № 2 эта служба должна каким-то образом убедиться, что у нее есть подписка в любой теме события в пространстве имен - и перенастроить себя после добавления новых тем и удаления старых. Это выходит за рамки этого вопроса, но тем не менее является требованием к дизайну.