Использование служебной шины Azure в локальной сети

Я работаю с темами и подписками Azure Service Bus. Он используется для отправки управляющих сообщений через приложение. Прослушиватели сообщений (подписчики) работают в рабочей роли, они собирают сообщения и обрабатывают запрос. Каждое сообщение в шине может быть принято только один раз, даже если одновременно работают несколько слушателей.

Нет проблем в использовании служебной шины; Однако мы сталкиваемся с некоторыми проблемами при отладке / тестировании приложения на локальном компьютере. У нас есть 2 служебные шины, одна для облака и одна для локальной отладки. Теперь, если несколько человек отлаживают приложение одновременно, сообщение выбирается только одной из систем (случайным образом). Это предполагаемое поведение, но оно вызывает неприятности при отладке.

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

5 ответов

Решение

К сожалению, нет локального эмулятора Azure SB. Это было задано ранее, и вы можете попробовать использовать служебную шину для Windows Server, но она немного отстает от облачной службы с точки зрения поддержки / функциональности функций и т. Д. Тем не менее, она поддерживает, например, Azure SDK. Ссылка MSDN для SB для WS.

Azure Service Bus - это брокер с конкурирующими потребителями. Отладка нескольких разработчиков с использованием одного и того же пространства имен будет непростой задачей (истек срок действия блокировки сообщения, и другой разработчик, отладивший это сообщение, получил это сообщение). Я бы посоветовал заглянуть в пространство имен на разработчика. С лицензией MSDN вы получаете достаточно кредитов Azure, чтобы каждый разработчик работал в "изолированном" пространстве имен. Что касается того, как заставить это работать, вы можете прочитать из файла конфигурации, переменной окружения и т. Д.

На ASB для Windows Server - в настоящее время это версия 1.1, где Azure SB на 3+. Размещенная версия всегда будет впереди локальной. Что-то, чтобы рассмотреть.

Проблема, вероятно, должна быть решена путем абстрагирования реализации служебной шины, чтобы ее можно было заменить на что-то, что вы действительно можете запустить локально (или в памяти). Я бы посоветовал не изобретать это колесо заново и выбрать такую ​​библиотеку, как Masstransit https://masstransit-project.com/.

В итоге мы использовали разные названия тем для каждого разработчика при отладке, что работает довольно хорошо.

Мы используем имя машины разработчика в пути для множества вещей разработчика. например, queueName, например «TheEventMessageQueue», может быть «TheEventMessageQueue-Machine123», и мы используем подписку для разработчиков, чтобы не навести беспорядок :)

Используя имя машины, легко определить, кому принадлежит очередь, если она выходит из-под контроля.

Другие вопросы по тегам