Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом руководстве выполняются следующие шаги:
- Создание пространства имен служебной шины с помощью портала Azure.
- Создание очереди служебной шины с помощью портала Azure.
- Напишите приложение TypeScript ESM, чтобы использовать пакет @azure/служебной шины :
- Отправьте набор сообщений в очередь.
- Получение этих сообщений из очереди.
Примечание.
В этом кратком руководстве содержатся пошаговые инструкции для простого сценария отправки сообщений в очередь Служебной шины и получения сообщений из них. Готовые примеры JavaScript и TypeScript для Служебной шины Azure находятся в репозитории пакета SDK Azure для JavaScript на GitHub.
Необходимые компоненты
Если вы новичок в этой службе, прежде чем приступить к этому руководству, ознакомьтесь с обзором служебной шины Azure.
- Подписка Azure. Для работы с этим учебником требуется учетная запись Azure. Вы можете активировать преимущества подписчика MSDN или зарегистрироваться для получения бесплатной учетной записи.
- TypeScript 5+
- LTS Node.js
Чтобы использовать это краткое руководство с собственной учетной записью Azure, вам потребуется:
- Установите Azure CLI, которая обеспечивает проверку подлинности без пароля на компьютере разработчика.
- Войдите с помощью учетной записи Azure в терминале или командной строке
az login. - Используйте ту же учетную запись при добавлении соответствующей роли данных в ресурс.
- Запустите код в том же терминале или командной строке.
- Запишите имя очереди для пространства имен служебная шина. Вам потребуется это в коде.
Примечание.
В этом руководстве приведены примеры, которые можно скопировать и запустить с помощью Node.js. Указания по созданию приложения Node.js можно найти в статьях Создание веб-приложений Node.js в Azure или Build and deploy a Node.js application to an Azure Cloud Service (Построение и развертывание приложения Node.js в облачной службе Azure).
Создание пространства имен на портале Azure
Чтобы начать использование сущностей обмена сообщениями служебной шины в Azure, создайте пространство имен с уникальным именем в Azure. Пространство имен предоставляет контейнер области для ресурсов служебной шины, таких как очереди и разделы в приложении.
Создание пространства имен службы:
Войдите на портал Azure.
Выберите всплывающее меню в левом верхнем углу и перейдите на страницу "Все службы".
На панели навигации слева выберите "Интеграция".
Прокрутите вниз дослужебной шины служб >обмена сообщениямии нажмите кнопку "Создать".
На вкладке "Основы" страницы"Создание пространства имен " выполните следующие действия:
Выберите подписку Azure, в которой будет создано пространство имен.
Для группы ресурсов выберите существующую группу ресурсов или создайте новую.
Введите имя пространства имен, которое соответствует следующим соглашениям об именовании.
- Это имя должно быть уникальным в пределах Azure. Система немедленно проверяет, доступно ли оно.
- Длина имени составляет не менее 6 и не более 50 символов.
- Имя может содержать только буквы, цифры, дефисы
-. - Имя должно начинаться с буквы или цифры и заканчиваться буквой или цифрой.
- Имя не заканчивается или
-sbне заканчивается-mgmt.
Для расположения выберите регион для размещения пространства имен.
Для параметра Ценовая категория выберите ценовую категорию ("Базовый", "Стандартный" или "Премиум") для пространства имен. Для работы с этим кратким руководством выберите вариант Стандартный.
При выборе уровня "Премиум" можно включить георепликацию для пространства имен. Функция георепликации гарантирует, что метаданные и данные пространства имен постоянно реплицируются из основного региона в один или несколько дополнительных регионов.
Внимание
Чтобы использовать разделы и подписки, выберите категорию "Стандартный" или "Премиум". Темы и подписки не поддерживаются в тарифном уровне "Базовый".
Если выбрана ценовая категория Премиум, укажите число единиц обмена сообщениями. В категории "Премиум" обеспечивается изоляция ресурсов на уровне ЦП и памяти, так что рабочая нагрузка выполняется изолированно от других. Этот контейнер ресурсов называется единицей обмена сообщениями. Пространству имен ценовой категории "Премиум" выделяется по крайней мере одна единица обмена сообщениями. Для каждого пространства имен служебной шины Premium можно выбрать 1, 2, 4, 8 или 16 единиц обмена сообщениями. Дополнительные сведения см. на уровне обмена сообщениями служебной шины уровня "Премиум".
В нижней части страницы выберите Review + create (Проверить и создать).
На странице Проверить и создать проверьте параметры и нажмите кнопку Создать.
После успешного развертывания ресурса выберите "Перейти к ресурсу " на странице развертывания.
Вы увидите домашнюю страницу пространства имен служебной шины.
Создание очереди на портале Azure
На странице пространства имен служебная шина разверните сущности в меню навигации слева и выберите "Очереди".
На странице очередей на панели инструментов выберите +Очередь.
Введите имя очереди. Оставьте другие значения своими значениями по умолчанию.
Нажмите кнопку "Создать".
Проверка подлинности приложения в Azure
В этой статье показано два способа подключения к служебной шине Azure: без пароля и строки подключения.
Первый вариант показывает, как использовать субъект безопасности в идентификаторе Microsoft Entra ID и управлении доступом на основе ролей (RBAC) для подключения к пространству имен служебная шина. Вам не нужно беспокоиться о наличии хардкодированной строки подключения в вашем коде, в файле конфигурации или в безопасном хранилище, таком как Azure Key Vault.
Второй вариант показывает, как использовать строка подключения для подключения к пространству имен служебная шина. Если вы не знакомы с Azure, вы можете найти вариант строка подключения проще следовать. Мы рекомендуем использовать параметр без пароля в реальных приложениях и рабочих средах. Дополнительные сведения см. в разделе "Проверка подлинности и авторизация служебной шины". Дополнительные сведения о проверке подлинности без пароля см. в статье "Проверка подлинности приложений .NET".
Назначение ролей пользователю Microsoft Entra
При локальной разработке убедитесь, что учетная запись пользователя, которая подключается к служебной шине Azure, имеет правильные разрешения. Для отправки и получения сообщений требуется роль владельца данных служебной шины Azure . Чтобы назначить себе эту роль, вам потребуется роль администратора доступа пользователей или другая роль, которая включает Microsoft.Authorization/roleAssignments/write действие.
Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Чтобы узнать больше о доступных областях для назначения ролей, см. статью "Общие сведения об области применения Azure RBAC".
В следующем примере роль назначается Azure Service Bus Data Owner учетной записи пользователя, которая предоставляет полный доступ к ресурсам Служебная шина Azure. В реальном сценарии следуйте принципу наименьших привилегий , чтобы предоставить пользователям только минимальные разрешения, необходимые для более безопасной рабочей среды.
Встроенные роли Azure для служебной шины Azure
Для служебной шины Azure управление пространствами имен и всеми связанными ресурсами через портал Azure и API управления ресурсами Azure уже защищено с помощью модели Azure RBAC. Azure предоставляет следующие встроенные роли Azure для авторизации доступа к пространству имен служебная шина:
- Владелец данных служебной шины Azure: обеспечивает доступ к пространству имен служебной шины и его сущностям, включая очереди, разделы, подписки и фильтры. Участник этой роли может отправлять и получать сообщения из очередей или разделов или подписок.
-
Отправитель данных служебной шины Azure: используйте эту роль для предоставления доступа к пространству
sendимен служебной шины и его сущностям. -
Приемник данных служебной шины Azure. Используйте эту роль, чтобы предоставить
receiveдоступ к пространству имен служебной шины и его сущностям.
Если вы хотите создать пользовательскую роль, см. раздел "Права", необходимые для операций служебная шина.
Добавление пользователя Microsoft Entra в роль владельца Служебная шина Azure
Добавьте имя пользователя Microsoft Entra в роль владельца данных Служебная шина Azure на уровне пространства имен служебная шина. Эта конфигурация позволяет приложению, работающему в контексте учетной записи пользователя, отправлять сообщения в очередь или раздел. Он может получать сообщения из очереди или подписки на тему.
Внимание
В большинстве случаев для распространения назначения ролей в Azure требуется минута или две. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
Если в портал Azure нет страницы пространства имен служебная шина, найдите пространство имен служебная шина с помощью главной панели поиска или навигации слева.
На странице обзора выберите элемент управления доступом (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите +Добавить из верхнего меню и добавьте назначение ролей.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите
Azure Service Bus Data Ownerи выберите соответствующий результат. Теперь щелкните Далее.В разделе Назначение доступа для выберите Пользователь, группа или субъект-служба и + Выбрать членов.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш user@domain адрес электронной почты), а затем выберите в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Настройка проекта
Создайте папку проекта для хранения файлов быстрого запуска.
В окне терминала в папке проекта инициализируйте проект Node.js.
npm init -ypackage.jsonОткройте файл в папке проекта и добавьте свойство для настройки ESM. Добавьте это свойство послеversionсвойства:"type":"module",В файле измените
package.jsonscriptsсвойство, чтобы скомпилировать файлы TypeScript.buildДобавьте сценарий."scripts": { "build": "tsc" }tsconfig.jsonСоздайте файл проекта для настройки сборки TypeScript ESM и скопируйте следующее в файл:{ "compilerOptions": { "module": "NodeNext", "target": "ESNext", "moduleResolution": "NodeNext", "outDir": "dist", "rootDir": "./src", "esModuleInterop": true, "skipLibCheck": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }Создайте папку
srcв проекте. Здесь вы будете размещать файлы TypeScript, созданные в этом кратком руководстве.
Установка пакета с помощью диспетчер пакетов узла (npm)
Чтобы установить необходимые пакеты npm для служебная шина, откройте командную строку, которая имеет
npmсвой путь, измените каталог на папку, в которой вы хотите получить примеры, а затем выполните эту команду.Установите следующие пакеты:
npm install @azure/service-bus @azure/identity
Отправка сообщений в очередь
В следующем примере кода показано, как отправить сообщение в очередь.
Для обеспечения проверки подлинности без пароля, необходимо выполнить вход с помощью Azure CLI az login для локального компьютера.
Откройте редактор, например Visual Studio Code.
В папке
srcсоздайте файл с именемsend.tsи вставьте в него приведенный ниже код. Этот код отправляет имена ученых в очередь сообщений.Внимание
Учетные данные без пароля предоставляются с параметром DefaultAzureCredential.
import { ServiceBusClient, ServiceBusSender, ServiceBusMessageBatch, } from "@azure/service-bus"; import { DefaultAzureCredential } from "@azure/identity"; // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); // name of the queue const queueName = "<QUEUE NAME>" const messages = [ { body: "Albert Einstein" }, { body: "Werner Heisenberg" }, { body: "Marie Curie" }, { body: "Steven Hawking" }, { body: "Isaac Newton" }, { body: "Niels Bohr" }, { body: "Michael Faraday" }, { body: "Galileo Galilei" }, { body: "Johannes Kepler" }, { body: "Nikolaus Kopernikus" } ]; async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const serviceBusClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createSender() can also be used to create a sender for a topic. const serviceBusSender: ServiceBusSender = serviceBusClient.createSender(queueName); try { // Tries to send all messages in a single batch. // Will fail if the messages cannot fit in a batch. // await sender.sendMessages(messages); // create a batch object let serviceBusMessageBatch: ServiceBusMessageBatch = await serviceBusSender.createMessageBatch(); for (let i = 0; i < messages.length; i++) { // for each message in the array // try to add the message to the batch if (!serviceBusMessageBatch.tryAddMessage(messages[i])) { // if it fails to add the message to the current batch // send the current batch as it is full await serviceBusSender.sendMessages(serviceBusMessageBatch); // then, create a new batch serviceBusMessageBatch = await serviceBusSender.createMessageBatch(); // now, add the message failed to be added to the previous batch to this batch if (!serviceBusMessageBatch.tryAddMessage(messages[i])) { // if it still can't be added to the batch, the message is probably too big to fit in a batch throw new Error("Message too big to fit in a batch"); } } } // Send the last created batch of messages to the queue await serviceBusSender.sendMessages(serviceBusMessageBatch); console.log(`Sent a batch of messages to the queue: ${queueName}`); // Close the sender await serviceBusSender.close(); } finally { await serviceBusSender.close(); } } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });Замените
<SERVICE-BUS-NAMESPACE>пространство имен служебная шина.Замените
<QUEUE NAME>именем очереди.Затем в окне командной строки выполните команду, которая запускает этот файл.
npm run build node dist/send.jsВы должны увидеть следующие выходные данные.
Sent a batch of messages to the queue: myqueue
Получение сообщений из очереди
Для обеспечения проверки подлинности без пароля, необходимо выполнить вход с помощью Azure CLI az login для локального компьютера.
Откройте редактор, например Visual Studio Code.
В папке
srcсоздайте файл с именемreceive.tsи вставьте в него следующий код.import { delay, ServiceBusClient, ServiceBusMessage, ProcessErrorArgs, ServiceBusReceiver } from "@azure/service-bus"; import { DefaultAzureCredential } from "@azure/identity"; // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); // name of the queue const queueName = "<QUEUE NAME>" async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const serviceBusClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createReceiver() can also be used to create a receiver for a subscription. const serviceBusReceiver: ServiceBusReceiver = serviceBusClient.createReceiver(queueName); // function to handle messages const myMessageHandler = async ( messageReceived: ServiceBusMessage, ): Promise<void> => { console.log(`Received message: ${messageReceived.body}`); }; // function to handle any errors const myErrorHandler = async (error: ProcessErrorArgs): Promise<void> => { console.log(error); }; // subscribe and specify the message and error handlers serviceBusReceiver.subscribe({ processMessage: myMessageHandler, processError: myErrorHandler, }); // Waiting long enough before closing the sender to send messages await delay(20000); await serviceBusReceiver.close(); await serviceBusReceiver.close(); } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });Замените
<SERVICE-BUS-NAMESPACE>пространство имен служебная шина.Замените
<QUEUE NAME>именем очереди.Затем в окне командной строки выполните команду, которая запускает этот файл.
npm run build node dist/receive.js
Вы должны увидеть следующие выходные данные.
Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Stephen Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus
На странице Обзор для пространства имен служебной шины в портале Azure можно видеть количество входящих и исходящих сообщений. Чтобы просмотреть последние значения, возможно, потребуется подождать около минуты, а затем обновить страницу.
Выберите очередь на этой странице Обзор, чтобы перейти на страницу Очередь служебной шины. На этой странице отображаются количество входящих и исходящих сообщений. Вы также можете увидеть другие сведения, например текущий размер очереди, максимальный размер, количество активных сообщений и т. д.
Устранение неполадок
Если при запуске версии кода TypeScript возникает одна из следующих ошибок, убедитесь, что вы выполнили вход с помощью команды Azure CLI, az login а соответствующая роль применяется к учетной записи пользователя Azure:
- Утверждения send требуются для выполнения этой операции.
- Утверждения "Receive" требуются для выполнения этой операции
Очистка ресурсов
Перейдите к пространству имен служебная шина в портал Azure и выберите "Удалить" в портал Azure, чтобы удалить пространство имен и очередь в ней.
Следующие шаги
Ознакомьтесь со следующими примерами и документацией: