#c# #.net #azure #azureservicebus #masstransit
Вопрос:
В настоящее время мы привязаны к одному экземпляру служебной шины Azure для локальной и тестовой среды (я бы предпочел другую настройку, но это не зависит от меня). Ранее мы использовали настраиваемую платформу, в которой для каждой темы создавалась подписка с именем, представляющим собой комбинацию имени службы, и, если проект запускался разработчиком на его компьютере, он добавлял «локальное имя», чтобы избежать конкуренции всех локальных компьютеров разработчиков и экземпляров сервера за одно и то же сообщение. Так, например, для службы покупок она создала подписку под названием ShoppingService для экземпляров сервера, а на локальной машине Джо она создала подписку под названием, скажем, ShoppingService-JoeComputer. Прямо сейчас мы пытаемся переключиться с этого пользовательского фреймворка на MassTransit, потому что нам нравятся дополнительные функции, которые он предоставляет (а также потому, что, честно говоря, пользовательский фреймворк был более ошибочным, чем мы хотели бы признать). Мы следили за этим видео, опубликованным Паттерсоном, чтобы создавать команды, события и потребителей, и все работает так, как описано:
MassTransit — Использование служебной шины Azure
Однако сейчас мы сталкиваемся с проблемой конкуренции, о которой я упоминал ранее. Чтобы решить эту проблему, мы попытаемся установить пользовательское соглашение об именах, которое мы в настоящее время используем, поэтому у меня есть следующие вопросы:
- Есть ли способ изменить соглашение об именах по умолчанию, используемое MassTransit? Мы хотели бы сохранить большую его часть там, где она создает тему на основе имени типа команды, но мы хотели бы добавить постфикс как в подписку на пересылку, так и в очередь. Другими словами, если бы мы говорили о команде «отправить заказ», описанной в видео, мы бы хотели, чтобы имя подписки было «отправить заказ-джо», а имя очереди- «отправить заказ-джо», если оно выполняется на компьютере Джо. Мы могли бы настроить конфигурацию вручную для каждого потребителя/клиента/издателя, но было бы здорово, если бы мы могли настроить ее «глобально».
- Используя соглашение по умолчанию, что произойдет, если есть две команды с именем «namespaceOne.Отправитель» и «namespaceTwo.ОтправИтель»? Основываясь на том, что мы видели, это создаст две разные темы, но обе подписки будут называться «отправить заказ», и обе будут пересылать сообщения в одну и ту же очередь под названием «отправить заказ». Это было бы запутанно, и я даже не знаю, правильно ли будет использовать команды MassTransit.
Комментарии:
1. Привет, не могли бы вы отправить код, чтобы мы помогли?
Ответ №1:
В MassTransit существует два соглашения об именовании. Имена сущностей (которые основаны на типе сообщения и будут разделами в служебной шине Azure) и имена конечных точек (которые основаны на потребителе, саге или типе действия и будут очередями в ASB).
Вы можете указать свой собственный формат имени сущности, чтобы настроить формат имени сущности, или вы можете переопределить определенные сообщения.
Вы также можете указать свой собственный формататор имен конечных точек, описанный в этом видео, чтобы настроить имена очередей, созданные для конечных точек приема. Или вы можете создать экземпляр встроенных форматтеров, указывающих различные аргументы конструктора для включения префикса, включения пространства имен и т. Д.
Комментарии:
1. Большое спасибо @chris-pattherson, это именно то, что я ищу. У меня есть только один вопрос относительно подписки, созданной при использовании шаблона запроса/ответа. Очередь имеет ожидаемое имя, но в конце подписки есть несколько странных символов: Изображение здесь
2. Если имя превышает лимит символов, оно усечет его и добавит хэшированное значение, чтобы сохранить его уникальным.