Начало работы с гибридными http-запросами Подключение ретранслятора в Node.js

В этом кратком руководстве описано, как создать приложения Node.js, которые отправляют и получают сообщения по протоколу HTTP. Приложения используют функцию гибридных подключений службы Azure Relay. См. дополнительные сведения о службе Azure Relay.

При работе с этим кратким руководством вы выполните следующие задачи:

  1. Создайте пространство имен ретранслятора с помощью портала Azure.
  2. Создайте гибридное подключение в этом пространстве имен с помощью портала Azure.
  3. Создайте серверное консольное приложение (прослушиватель) для получения сообщений.
  4. Создайте клиентское консольное приложение (отправитель) для отправки сообщений.
  5. Запустите приложения.

Необходимые компоненты

Создание пространства имен с помощью портала Azure

  1. Войдите на портал Azure.

  2. В меню слева выберите Все службы. Выберите "Интеграция", найдите ретрансляторы, переместите указатель мыши на ретрансляторы и нажмите кнопку "Создать".

    Снимок экрана: выбор ретрансляторов —> кнопка

  3. На странице "Создание пространства имен" выполните следующие действия.

    1. Выберите подписку Azure, в которой будет создано пространство имен.

    2. Выберите существующую группу ресурсов, в которую будет размещено это пространство имен, или создайте новую.

    3. Введите имя пространства имен Ретранслятора.

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

    5. В нижней части страницы выберите Review + create (Проверить и создать).

      Снимок экрана: страница

    6. На странице Отзыв и создание выберите Создать.

    7. Через несколько минут вы увидите страницу Ретранслятора для пространства имен.

      Снимок экрана: домашняя страница пространства имен Ретранслятора.

Получение учетных данных управления

  1. На странице "Ретранслятор" выберите политики общего доступа в меню слева. `

  2. На странице Политики общего доступа щелкните RootManageSharedAccessKey.

  3. В разделе SAS Policy: RootManageSharedAccessKey (Политика SAS: RootManageSharedAccessKey) нажмите кнопку Копировать рядом с элементом Первичная строка подключения. Строка подключения будет скопирована в буфер обмена для дальнейшего использования. Вставьте на время эти значения в Блокноте или любом другом месте.

  4. Повторите предыдущий шаг, скопировав и вставив значение первичного ключа во временное расположение для последующего использования.

    Снимок экрана: сведения о подключении для пространства имен Ретранслятора.

Создание гибридного подключения с помощью портала Azure

На странице Ретранслятора для пространства имен выполните следующие действия, чтобы создать гибридное подключение.

  1. В меню слева в разделе "Сущности" выберите гибридные Подключение ions, а затем выберите +Гибридное Подключение.

    Снимок экрана: страница гибридных Подключение ions.

  2. На странице "Создание гибридной Подключение ion" введите имя гибридного подключения и нажмите кнопку "Создать".

    Снимок экрана: страница создания гибридной Подключение ion.

Создание серверного приложения (прослушивателя)

Для ожидания передачи данных и получения сообщений, отправленных ретранслятором, создайте консольное приложение Node.js.

Создание приложения Node.js

Создайте новый файл JavaScript с именем listener.js.

Добавление пакета Ретранслятора

Запустите npm install hyco-https из командной строки NPM в папке проекта.

Написание кода для обработки запросов

  1. Добавьте следующую константу в верхнюю часть файла listener.js.

    const https = require('hyco-https');
    
  2. Добавьте следующие константы в файл listener.js для сведений о гибридном подключении. Замените заполнители в скобках значениями, которые получены при создании гибридного подключения.

    • const ns — пространство имен ретранслятора. Необходимо использовать полное имя пространства имен, например {namespace}.servicebus.windows.net.
    • const path — имя гибридного подключения.
    • const keyrule— Имя ключа политики общего доступа, который по умолчанию.RootManageSharedAccessKey
    • const key — первичный ключ пространства имен, сохраненного ранее.
  3. Добавьте в файл 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 и маркеров ретранслятора.

Написание кода для отправки сообщений

  1. Добавьте constants в начало файла sender.js.

    const https = require('hyco-https');
    
  2. Добавьте следующие константы в файл sender.js для сведений о гибридном подключении. Замените заполнители в скобках значениями, которые получены при создании гибридного подключения.

    • const ns — пространство имен ретранслятора. Необходимо использовать полное имя пространства имен, например {namespace}.servicebus.windows.net.
    • const path — имя гибридного подключения.
    • const keyrule— Имя ключа политики общего доступа, который по умолчанию.RootManageSharedAccessKey
    • const key — первичный ключ пространства имен, сохраненного ранее.
  3. Добавьте в файл 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}`);
    });
    

Запуск приложений

  1. Запустите серверное приложение. Для этого в командной строке Node.js введите node listener.js.
  2. Запустите клиентское приложение. Для этого в командной строке Node.js введите node sender.js, а затем любой текст.
  3. Убедитесь, что серверное консольное приложение выводит текст, введенный в клиентском приложении.

Поздравляем, вы создали приложение для гибридных подключений с помощью Node.js!

Следующие шаги

В этом кратком руководстве описано, как создать клиентские и серверные приложения Node.js, которые отправляют и получают сообщения по протоколу HTTP. Функция гибридных подключений службы Azure Relay также поддерживает использование протокола WebSocket для отправки и получения сообщений. См. дополнительные сведения об использовании протокола WebSocket с гибридными подключениями Azure Relay.

В этом кратком руководстве описано, как использовать Node.js для создания клиентских и серверных приложений. Сведения о том, как создавать клиентские и серверные приложения с помощью .NET Framework, см. в руководствах по использованию .NET и WebSocket или .NET и HTTP.