Начало работы с HTTP-запросами HTTP гибридных подключений ретранслятора в Node.js
В этом кратком руководстве описано, как создать приложения Node.js, которые отправляют и получают сообщения по протоколу HTTP. Приложения используют функцию гибридных подключений службы Azure Relay. См. дополнительные сведения о службе Azure Relay.
При работе с этим кратким руководством вы выполните следующие задачи:
- Создайте пространство имен ретранслятора с помощью портала Azure.
- Создайте гибридное подключение в этом пространстве имен с помощью портала Azure.
- Создайте серверное консольное приложение (прослушиватель) для получения сообщений.
- Создайте клиентское консольное приложение (отправитель) для отправки сообщений.
- Запустите приложения.
Необходимые компоненты
- Node.js.
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начать работу.
Создание пространства имен с помощью портала Azure
Войдите на портал Azure.
В меню слева выберите Все службы. Выберите "Интеграция", найдите ретрансляторы, переместите указатель мыши на ретрансляторы и нажмите кнопку "Создать".
На странице "Создание пространства имен" выполните следующие действия.
Выберите подписку Azure, в которой будет создано пространство имен.
Выберите существующую группу ресурсов, в которую будет размещено это пространство имен, или создайте новую.
Введите имя пространства имен Ретранслятора.
Выберите регион, в котором должно размещаться пространство имен.
В нижней части страницы выберите Review + create (Проверить и создать).
На странице Отзыв и создание выберите Создать.
Через несколько минут вы увидите страницу Ретранслятора для пространства имен.
Получение учетных данных управления
На странице "Ретранслятор" выберите политики общего доступа в меню слева. `
На странице Политики общего доступа щелкните RootManageSharedAccessKey.
В разделе SAS Policy: RootManageSharedAccessKey (Политика SAS: RootManageSharedAccessKey) нажмите кнопку Копировать рядом с элементом Первичная строка подключения. Строка подключения будет скопирована в буфер обмена для дальнейшего использования. Вставьте на время эти значения в Блокноте или любом другом месте.
Повторите предыдущий шаг, скопировав и вставив значение первичного ключа во временное расположение для последующего использования.
Создание гибридного подключения с помощью портала Azure
На странице Ретранслятора для пространства имен выполните следующие действия, чтобы создать гибридное подключение.
В меню слева выберите "Гибридные подключения" и выберите "Гибридные подключения".
На странице "Создание гибридного подключения" введите имя гибридного подключения и нажмите кнопку "Создать".
Создание серверного приложения (прослушивателя)
Для ожидания передачи данных и получения сообщений, отправленных ретранслятором, создайте консольное приложение Node.js.
Создание приложения Node.js
Создайте новый файл JavaScript с именем listener.js
.
Добавление пакета Ретранслятора
Запустите npm install hyco-https
из командной строки NPM в папке проекта.
Написание кода для обработки запросов
Добавьте следующую константу в верхнюю часть файла
listener.js
.const https = require('hyco-https');
Добавьте следующие константы в файл
listener.js
для сведений о гибридном подключении. Замените заполнители в скобках значениями, которые получены при создании гибридного подключения.const ns
— пространство имен ретранслятора. Необходимо использовать полное имя пространства имен, например{namespace}.servicebus.windows.net
.const path
— имя гибридного подключения.const keyrule
— Имя ключа политики общего доступа, который по умолчанию.RootManageSharedAccessKey
const key
— первичный ключ пространства имен, сохраненного ранее.
Добавьте в файл
listener.js
указанный ниже код. :Обратите внимание, что код не отличается от простого примера HTTP-сервера, который можно найти в руководствах Node.js начинающих, что исключение использования
createRelayedServer
вместо типичнойcreateServer
функции.var uri = https.createRelayListenUri(ns, path); var server = https.createRelayedServer( { server : uri, token : () => https.createRelayToken(uri, keyrule, key) }, (req, res) => { console.log('request accepted: ' + req.method + ' on ' + req.url); res.setHeader('Content-Type', 'text/html'); res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>'); }); server.listen( (err) => { if (err) { return console.log('something bad happened', err) } console.log(`server is listening on ${port}`) }); server.on('error', (err) => { console.log('error: ' + err); });
Вот как должен выглядеть файл listener.js:
const https = require('hyco-https'); const ns = "{RelayNamespace}"; const path = "{HybridConnectionName}"; const keyrule = "{SASKeyName}"; const key = "{SASKeyValue}"; var uri = https.createRelayListenUri(ns, path); var server = https.createRelayedServer( { server : uri, token : () => https.createRelayToken(uri, keyrule, key) }, (req, res) => { console.log('request accepted: ' + req.method + ' on ' + req.url); res.setHeader('Content-Type', 'text/html'); res.end('<html><head><title>Hey!</title></head><body>Relayed Node.js Server!</body></html>'); }); server.listen( (err) => { if (err) { return console.log('something bad happened', err) } console.log(`server is listening on ${port}`) }); server.on('error', (err) => { console.log('error: ' + err); });
Создание клиентского приложения (отправителя)
Для отправки сообщений в ретранслятор используйте любой клиент HTTP или создайте консольное приложение Node.js.
Создание приложения Node.js
Если при создании ретранслятора вы отключили параметр"Требует авторизации клиента", запросы на URL-адрес гибридных подключений можно отправлять с помощью любого браузера. Для доступа к защищенным конечным точкам необходимо создать и передать маркер в заголовок ServiceBusAuthorization
, который приведен ниже.
Для начала создайте новый файл JavaScript с именем sender.js
.
Добавление пакета диспетчер пакетов узла ретрансляции
Запустите npm install hyco-https
из командной строки NPM в папке проекта. Этот пакет также импортирует обычный пакет https
. На клиентской стороне ключевое различие заключается в том, что пакет предоставляет функции для создания URI и маркеров ретранслятора.
Написание кода для отправки сообщений
Добавьте
constants
в начало файлаsender.js
.const https = require('hyco-https');
Добавьте следующие константы в файл
sender.js
для сведений о гибридном подключении. Замените заполнители в скобках значениями, которые получены при создании гибридного подключения.const ns
— пространство имен ретранслятора. Необходимо использовать полное имя пространства имен, например{namespace}.servicebus.windows.net
.const path
— имя гибридного подключения.const keyrule
— Имя ключа политики общего доступа, который по умолчанию.RootManageSharedAccessKey
const key
— первичный ключ пространства имен, сохраненного ранее.
Добавьте в файл
sender.js
указанный ниже код. Обратите внимание, что код значительно отличается от регулярного использования Node.js клиента HTTPS; он просто добавляет заголовок авторизации.https.get({ hostname : ns, path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path, port : 443, headers : { 'ServiceBusAuthorization' : https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key) } }, (res) => { let error; if (res.statusCode !== 200) { console.error('Request Failed.\n Status Code: ${statusCode}'); res.resume(); } else { res.setEncoding('utf8'); res.on('data', (chunk) => { console.log(`BODY: ${chunk}`); }); res.on('end', () => { console.log('No more data in response.'); }); }; }).on('error', (e) => { console.error(`Got error: ${e.message}`); });
Вот как должен выглядеть файл sender.js:
const https = require('hyco-https'); const ns = "{RelayNamespace}"; const path = "{HybridConnectionName}"; const keyrule = "{SASKeyName}"; const key = "{SASKeyValue}"; https.get({ hostname : ns, path : (!path || path.length == 0 || path[0] !== '/'?'/':'') + path, port : 443, headers : { 'ServiceBusAuthorization' : https.createRelayToken(https.createRelayHttpsUri(ns, path), keyrule, key) } }, (res) => { let error; if (res.statusCode !== 200) { console.error('Request Failed.\n Status Code: ${statusCode}'); res.resume(); } else { res.setEncoding('utf8'); res.on('data', (chunk) => { console.log(`BODY: ${chunk}`); }); res.on('end', () => { console.log('No more data in response.'); }); }; }).on('error', (e) => { console.error(`Got error: ${e.message}`); });
Примечание.
Пример кода в этой статье использует строка подключения для проверки подлинности в пространстве имен Ретранслятора Azure, чтобы упростить учебник. Мы рекомендуем использовать проверку подлинности Идентификатора Microsoft Entra в рабочих средах, а не использовать строка подключения или подписанные URL-адреса, что может быть проще скомпрометировано. Подробные сведения и пример кода для использования проверки подлинности идентификатора Microsoft Entra см. в статье "Проверка подлинности и авторизация приложения с помощью идентификатора Microsoft Entra ID" для доступа к сущностям Ретрансляции Azure и аутентификации управляемого удостоверения с помощью идентификатора Microsoft Entra для доступа к ресурсам Ретранслятора Azure.
Запуск приложений
- Запустите серверное приложение. Для этого в командной строке Node.js введите
node listener.js
. - Запустите клиентское приложение. Для этого в командной строке Node.js введите
node sender.js
, а затем любой текст. - Убедитесь, что серверное консольное приложение выводит текст, введенный в клиентском приложении.
Поздравляем, вы создали приложение для гибридных подключений с помощью Node.js!
Следующие шаги
В этом кратком руководстве описано, как создать клиентские и серверные приложения Node.js, которые отправляют и получают сообщения по протоколу HTTP. Функция гибридных подключений службы Azure Relay также поддерживает использование протокола WebSocket для отправки и получения сообщений. См. дополнительные сведения об использовании протокола WebSocket с гибридными подключениями Azure Relay.
В этом кратком руководстве описано, как использовать Node.js для создания клиентских и серверных приложений. Сведения о том, как создавать клиентские и серверные приложения с помощью .NET Framework, см. в руководствах по использованию .NET и WebSocket или .NET и HTTP.