Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этого краткого руководства вы узнаете, как отправлять события и получать события из концентратора событий с помощью пакета npm @azure/event-hubs .
Если вы не знакомы с Центрами событий Azure, ознакомьтесь с общими сведениями о Центрах событий перед началом работы.
Предпосылки
- Подписка Microsoft Azure. Чтобы использовать службы Azure, в том числе Центры событий Azure, потребуется действующая подписка. Если у вас нет учетной записи Azure, зарегистрируйтесь для получения бесплатной пробной версии.
- Node.js LTS. Скачайте последнюю долгосрочную версию поддержки (LTS).
- Visual Studio Code (рекомендовано) или любая другая интегрированная среда разработки (IDE).
- Создайте пространство имен Центров событий и концентратор событий. Используйте портал Azure, чтобы создать пространство имен типа Event Hubs. Получите учетные данные управления, которые необходимы вашему приложению для взаимодействия с концентратором событий. Дополнительные сведения см. в статье "Создание концентратора событий" с помощью портала Azure.
Установка пакетов npm для отправки событий
Чтобы установить пакет менеджера пакетов Node (npm) для Центров событий, откройте окно командной строки, в которой доступен путь npm
. Измените каталог на папку, в которой вы хотите сохранить примеры.
Выполните следующие команды:
npm install @azure/event-hubs
npm install @azure/identity
Проверка подлинности приложения в Azure
В этом кратком руководстве показано два способа подключения к Центрам событий Azure:
- Без пароля. Используйте принципал безопасности в Microsoft Entra ID и управление доступом на основе ролей (RBAC) для подключения к пространству имен Центров событий. Вам не нужно беспокоиться о наличии жестко закодированных строк подключения в коде, в файле конфигурации или безопасном хранилище, например Azure Key Vault.
- Строка подключения. Используйте строку подключения для подключения к пространству имен Event Hubs. Если вы не знакомы с Azure, вы можете найти вариант строка подключения проще следовать.
Мы рекомендуем использовать параметр без пароля в реальных приложениях и рабочих средах. Дополнительные сведения см. в статье "Проверка подлинности и авторизация служебной шины" иподключения без пароля для служб Azure.
Назначение ролей пользователю Microsoft Entra
При локальной разработке убедитесь, что учетная запись пользователя, которая подключается к Центрам событий Azure, имеет правильные разрешения. Для отправки и получения сообщений требуется роль владельца данных Центров событий Azure . Чтобы назначить себе эту роль, вам потребуется роль администратора доступа пользователей или другая роль, которая включает Microsoft.Authorization/roleAssignments/write
действие. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения см. на странице "Общие сведения об области применения Azure RBAC".
В следующем примере вашей учетной записи пользователя назначается роль Azure Event Hubs Data Owner
, предоставляющая полный доступ к ресурсам Azure Event Hubs. В реальном сценарии следуйте принципу наименьших привилегий , чтобы предоставить пользователям только минимальные разрешения, необходимые для более безопасной рабочей среды.
Встроенные роли Azure для Центров событий Azure
Для Azure Event Hubs управление пространствами имен и всеми связанными ресурсами через портал Azure и API управления ресурсами Azure уже защищено с помощью модели Azure RBAC. Azure предоставляет следующие встроенные роли для авторизации доступа к пространству имен Центров событий:
- Владелец данных Центров событий Azure: включает доступ к пространству имен Центров событий и его сущностям (очереди, разделы, подписки и фильтры).
- Отправитель данных для Центров событий Azure: используйте эту роль для предоставления отправителю доступа к пространству имен Центров событий и его сущностям.
- Получатель данных в Azure Event Hubs: Используйте эту роль, чтобы предоставить получателю доступ к пространству имен центров событий Event Hubs и его сущностям.
Если вы хотите создать пользовательскую роль, см. раздел "Права", необходимые для операций Центров событий.
Это важно
В большинстве случаев для распространения назначения ролей в Azure требуется минута или две. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
В портале Azure находите ваше пространство имен Event Hubs с помощью основной строки поиска или навигации слева.
На странице обзора выберите элемент управления доступом (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите +Добавить в верхнем меню. Затем выберите "Добавить назначение роли".
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите
Azure Event Hubs Data Owner
и выберите соответствующий результат. Теперь щелкните Далее.В разделе "Назначение доступа" выберите "Пользователь", "Группа" или "Субъект-служба". Затем нажмите кнопку +Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш user@domain адрес электронной почты). Нажмите Выбрать в нижней части диалогового окна.
Выберите Рецензирование + назначение, чтобы перейти на окончательную страницу. Нажмите кнопку "Проверить и назначить " еще раз, чтобы завершить процесс.
Отправка событий
В этом разделе описано, как создать приложение JavaScript, которое отправляет события в концентратор событий.
Откройте текстовый редактор, например Visual Studio Code.
Создайте файл с именемsend.js. Вставьте в него следующий код:
В коде используйте реальные значения для замены следующих заполнителей:
EVENT HUBS NAMESPACE NAME
EVENT HUB NAME
const { EventHubProducerClient } = require("@azure/event-hubs"); const { DefaultAzureCredential } = require("@azure/identity"); // Event hubs const eventHubsResourceName = "EVENT HUBS NAMESPACE NAME"; const fullyQualifiedNamespace = `${eventHubsResourceName}.servicebus.windows.net`; const eventHubName = "EVENT HUB NAME"; // Azure Identity - passwordless authentication const credential = new DefaultAzureCredential(); async function main() { // Create a producer client to send messages to the event hub. const producer = new EventHubProducerClient(fullyQualifiedNamespace, eventHubName, credential); // Prepare a batch of three events. const batch = await producer.createBatch(); batch.tryAdd({ body: "passwordless First event" }); batch.tryAdd({ body: "passwordless Second event" }); batch.tryAdd({ body: "passwordless Third event" }); // Send the batch to the event hub. await producer.sendBatch(batch); // Close the producer client. await producer.close(); console.log("A batch of three events have been sent to the event hub"); } main().catch((err) => { console.log("Error occurred: ", err); });
Чтобы запустить приложение, используйте следующую команду:
node send.js
Команда отправляет пакет из трех событий в концентратор событий.
Если вы используете безпарольную аутентификацию (управление доступом на основе ролей (RBAC) в Microsoft Entra ID), возможно, потребуется войти в Azure, используя учетную запись, добавленную в роль владельца данных Azure Event Hubs. Используйте команду
az login
.На портале Azure убедитесь, что концентратор событий получил сообщения. Чтобы обновить диаграмму, обновите страницу. Может потребоваться несколько секунд, чтобы показать, что сообщения получены.
Замечание
Дополнительные сведения и полный исходный код см. на странице sendEvents.js GitHub.
Получение событий
В этом разделе вы получаете события из концентратора событий с помощью хранилища BLOB-объектов Azure в приложении JavaScript. Она выполняет контрольные точки метаданных для полученных сообщений с регулярными интервалами в хранилище Azure. Благодаря такому подходу позже можно легко продолжить получать сообщения с того места, где вы остановились.
Следуйте этим рекомендациям при использовании хранилища BLOB-объектов Azure в качестве хранилища контрольных точек:
- Используйте отдельный контейнер для каждой группы потребителей. Вы можете использовать одну и ту же учетную запись хранения, но использовать один контейнер для каждой группы.
- Не используйте учетную запись хранения для других действий.
- Не используйте контейнер для ничего другого.
- Создайте учетную запись хранения в том же регионе, что и развернутое приложение. Если приложение находится в локальной среде, попробуйте выбрать ближайший регион.
На странице учетной записи хранения в портале Azure в разделе службы BLOB убедитесь, что следующие параметры отключены.
- Иерархическое пространство имен
- Обратимое удаление BLOB-объекта
- Управление версиями
Создать учетную запись хранения Azure и контейнер Blob
Чтобы создать учетную запись хранения данных Azure с контейнером BLOB, выполните приведенные действия.
- Создание учетной записи хранения Azure
- Создайте контейнер BLOB-объектов в учетной записи хранения
- Аутентификация для доступа к контейнеру BLOB-объектов
При локальной разработке убедитесь, что учетная запись пользователя, которая обращается к данным больших двоичных объектов, имеет правильные разрешения. Необходим участник данных BLOB-объектов хранилища для чтения и записи данных BLOB-объектов. Чтобы назначить себе эту роль, необходимо назначить роль администратора доступа пользователей или другую роль, которая включает действие Microsoft.Authorization/roleAssignments/write . Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения см. в Описание области действия для Azure RBAC.
В этом сценарии вы назначаете разрешения своей учетной записи пользователя, ограниченные учетной записью хранения, чтобы следовать принципу наименьших привилегий. В рамках этой практики пользователям предоставляются только минимальные необходимые разрешения, что позволяет создавать более защищенные рабочие среды.
В следующем примере роль участника данных BLOB-объектов хранилища назначается учетной записи пользователя, которая предоставляет доступ как для чтения, так и записи к данным BLOB-объектов в вашей учетной записи хранения.
Это важно
В большинстве случаев для распространения назначения ролей в Azure требуется минута или две. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.
На странице учетной записи хранения выберите элемент управления доступом (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите +Добавить в верхнем меню. Затем выберите "Добавить назначение роли".
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите Storage Blob Data Contributor. Выберите соответствующий результат, а затем нажмите кнопку Далее.
В разделе Назначение доступа выберите Пользователь, группа или сервисный принципал, а затем нажмите + Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш адрес электронной почты user@domain), а затем выберите Select в нижней части диалогового окна.
Выберите Рецензирование + назначение, чтобы перейти на окончательную страницу. Нажмите кнопку "Проверить и назначить " еще раз, чтобы завершить процесс.
Установка пакетов npm для получения событий
Для принимающей стороны необходимо установить еще два пакета. В этом кратком руководстве вы используете Azure Blob-хранилище для сохранения контрольных точек, чтобы программа не считывала уже прочитанные события. Оно регулярно выполняет фиксацию метаданных для полученных сообщений в большом двоичном объекте. Благодаря такому подходу позже можно легко продолжить получать сообщения с того места, где вы остановились.
Выполните следующие команды:
npm install @azure/storage-blob
npm install @azure/eventhubs-checkpointstore-blob
npm install @azure/identity
Написание кода для получения событий
Откройте текстовый редактор, например Visual Studio Code.
Создайте файл с именемreceive.js. Вставьте в него следующий код:
В коде используйте реальные значения для замены следующих заполнителей:
EVENT HUBS NAMESPACE NAME
EVENT HUB NAME
STORAGE ACCOUNT NAME
STORAGE CONTAINER NAME
const { DefaultAzureCredential } = require("@azure/identity"); const { EventHubConsumerClient, earliestEventPosition } = require("@azure/event-hubs"); const { ContainerClient } = require("@azure/storage-blob"); const { BlobCheckpointStore } = require("@azure/eventhubs-checkpointstore-blob"); // Event hubs const eventHubsResourceName = "EVENT HUBS NAMESPACE NAME"; const fullyQualifiedNamespace = `${eventHubsResourceName}.servicebus.windows.net`; const eventHubName = "EVENT HUB NAME"; const consumerGroup = "$Default"; // name of the default consumer group // Azure Storage const storageAccountName = "STORAGE ACCOUNT NAME"; const storageContainerName = "STORAGE CONTAINER NAME"; const baseUrl = `https://${storageAccountName}.blob.core.windows.net`; // Azure Identity - passwordless authentication const credential = new DefaultAzureCredential(); async function main() { // Create a blob container client and a blob checkpoint store using the client. const containerClient = new ContainerClient( `${baseUrl}/${storageContainerName}`, credential ); const checkpointStore = new BlobCheckpointStore(containerClient); // Create a consumer client for the event hub by specifying the checkpoint store. const consumerClient = new EventHubConsumerClient(consumerGroup, fullyQualifiedNamespace, eventHubName, credential, checkpointStore); // Subscribe to the events, and specify handlers for processing the events and errors. const subscription = consumerClient.subscribe({ processEvents: async (events, context) => { if (events.length === 0) { console.log(`No events received within wait time. Waiting for next interval`); return; } for (const event of events) { console.log(`Received event: '${event.body}' from partition: '${context.partitionId}' and consumer group: '${context.consumerGroup}'`); } // Update the checkpoint. await context.updateCheckpoint(events[events.length - 1]); }, processError: async (err, context) => { console.log(`Error : ${err}`); } }, { startPosition: earliestEventPosition } ); // After 30 seconds, stop processing. await new Promise((resolve) => { setTimeout(async () => { await subscription.close(); await consumerClient.close(); resolve(); }, 30000); }); } main().catch((err) => { console.log("Error occurred: ", err); });
Чтобы запустить этот код, используйте команду
node receive.js
. В окне отображаются сообщения о полученных событиях.C:\Self Study\Event Hubs\JavaScript>node receive.js Received event: 'First event' from partition: '0' and consumer group: '$Default' Received event: 'Second event' from partition: '0' and consumer group: '$Default' Received event: 'Third event' from partition: '0' and consumer group: '$Default'
Замечание
Полный исходный код, включая информационные комментарии, см. receiveEventsUsingCheckpointStore.js.
Программа-получатель получает события от всех разделов группы потребителей по умолчанию в концентраторе событий.
Очистите ресурсы
Удалите группу ресурсов с пространством имен Центров событий или удалите только пространство имен, если вы хотите сохранить группу ресурсов.