Поделиться через


Краткое руководство. Публикация и подписка на сообщения MQTT в пространстве имен Сетки событий с помощью Azure CLI

Функция брокера MQTT Сетка событий Azure поддерживает обмен сообщениями с помощью протокола MQTT. Клиенты (как устройства, так и облачные приложения) могут публиковать и подписываться на сообщения MQTT по гибким иерархическим темам для таких сценариев, как широкомасштабная трансляция и управление и управление.

В этой статье вы используете Azure CLI для:

  • Создайте пространство имен Сетки событий и включите брокер MQTT.
  • Создайте подресурсы, такие как клиенты, группы клиентов и пространства тем.
  • Предоставление клиентам доступа к публикации и подписке на разделные пространства.
  • Публикация и получение сообщений MQTT.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

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

  • Если вы не знакомы с Сеткой событий, ознакомьтесь с обзором сетки событий перед началом работы с этим руководством.
  • Зарегистрируйте поставщик ресурсов сетки событий в соответствии с инструкциями, описанными в разделе "Регистрация поставщика ресурсов сетки событий".
  • Убедитесь, что в брандмауэре открыт порт 8883. В этом руководстве используется протокол MQTT, который взаимодействует через порт 8883. Этот порт может быть заблокирован в некоторых корпоративных и образовательных сетевых средах.
  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, попробуйте запустить Azure CLI в контейнере Docker. Дополнительные сведения см. в разделе "Запуск Azure CLI" в контейнере Docker.
  • Если вы используете локальную установку, войдите в Azure CLI с помощью az login команды. Чтобы завершить процесс проверки подлинности, выполните действия, которые отображаются в терминале. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
  • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
  • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
  • Для этой статьи требуется версия 2.53.1 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
  • Для создания отпечатка и проверки подлинности подключения клиента требуется сертификат клиента X.509.
  • Ознакомьтесь с документацией по интерфейсу командной строки пространства имен Сетки событий.

Создание примера сертификата клиента и отпечатка

Если у вас еще нет сертификата, можно создать пример сертификата с помощью шага CLI. Рассмотрите возможность установки вручную для Windows.

После успешной установки с помощью шага CLI откройте командную строку в папке профиля пользователя (тип Win+R %USERPROFILE%).

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

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. Используйте файлы центра сертификации (ЦС), созданные для создания сертификата для клиента. Убедитесь, что в команде используется правильный путь к файлам сертификатов и секретов.

    step certificate create client1-authnID client1-authnID.pem client1-authnID.key --ca .step/certs/intermediate_ca.crt --ca-key .step/secrets/intermediate_ca_key --no-password --insecure --not-after 2400h
    
  3. Чтобы просмотреть отпечаток, выполните команду шага.

    step certificate fingerprint client1-authnID.pem
    

Создание пространства имен

Используйте команду для создания пространства имен. Обновите команду с помощью группы ресурсов и имени пространства имен.

az eventgrid namespace create -g {Resource Group} -n {Namespace Name} --topic-spaces-configuration "{state:Enabled}"

Чтобы упростить краткое руководство, создайте пространство имен с минимальными свойствами. Подробные инструкции по настройке сети, безопасности и других параметров на других страницах мастера см. в статье "Создание пространств имен и управление ими".

Создание клиентов

Используйте команду для создания клиента. Обновите команду с помощью группы ресурсов и имени пространства имен.

az eventgrid namespace client create -g {Resource Group} --namespace-name {Namespace Name} -n {Client Name} --authentication-name client1-authnID --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[Client Thumbprint]}"
  • Чтобы упростить краткое руководство, вы используете соответствие отпечатков для проверки подлинности. Инструкции по использованию цепочки сертификатов ЦС X.509 для проверки подлинности клиента см. в разделе "Проверка подлинности клиента с помощью цепочки сертификатов".
  • Для этого упражнения мы используем группу по умолчанию $all client , которая включает все клиенты в пространстве имен. Дополнительные сведения о создании пользовательских групп клиентов с помощью клиентских атрибутов см. в разделе "Группы клиентов".

Создание пространств разделов

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

az eventgrid namespace topic-space create -g {Resource Group} --namespace-name {Namespace Name} -n {Topicspace Name} --topic-templates ['contosotopics/topic1']

Создание привязок разрешений

az eventgrid Используйте команду, чтобы создать первую привязку разрешений для разрешения издателя. Обновите команду с помощью группы ресурсов, имени пространства имен и имени привязки разрешений.

az eventgrid namespace permission-binding create -g {Resource Group} --namespace-name {Namespace Name} -n {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}

Используйте команду, чтобы создать вторую привязку разрешений. Обновите команду с помощью группы ресурсов, имени пространства имен и имени привязки разрешений. Эта привязка разрешений для подписчиков.

az eventgrid namespace permission-binding create -g {Resource Group} --namespace-name {Namespace Name} -n {Name of second Permission Binding} --client-group-name '$all' --permission subscriber --topic-space-name {Topicspace Name}

Публикация и подписка на сообщения MQTT

Следующий пример кода — это простой издатель .NET, который пытается подключиться к пространству имен и подписаться на раздел MQTT. Код можно использовать для изменения в соответствии с вашим требованием и запуска кода в Visual Studio или любого из любимых средств.

Чтобы запустить этот код, необходимо установить пакет MQTTnet (версия 4.1.4.563) из NuGet. (В Visual Studio щелкните правой кнопкой мыши имя проекта в Обозреватель решений, перейдите к разделу "Управление пакетами NuGet" и найдите MQTTnet. Выберите пакет MQTTnet и установите.)

Примечание.

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

Пример кода C# для подключения клиента, публикации и подписки на сообщение MQTT в разделе

Внимание

Обновите путь к файлу сертификата клиента и ключа pem в зависимости от расположения файлов сертификатов клиента. Кроме того, убедитесь, что имя проверки подлинности клиента и сведения о разделе соответствуют конфигурации.

using MQTTnet.Client;
using MQTTnet;
using System.Security.Cryptography.X509Certificates;

string hostname = "{Your Event Grid namespace MQTT hostname}";
string clientId = "client1-session1";  //client ID can be the session identifier.  A client can have multiple sessions using username and clientId.
string x509_pem = @" client certificate cer.pem file path\client.cer.pem";  //Provide your client certificate .cer.pem file path
string x509_key = @"client certificate key.pem file path\client.key.pem";  //Provide your client certificate .key.pem file path

var certificate = new X509Certificate2(X509Certificate2.CreateFromPemFile(x509_pem, x509_key).Export(X509ContentType.Pkcs12));

var mqttClient = new MqttFactory().CreateMqttClient();

var connAck = await mqttClient!.ConnectAsync(new MqttClientOptionsBuilder()
    .WithTcpServer(hostname, 8883)
    .WithClientId(clientId)
    .WithCredentials("client1-authnID", "")  //use client authentication name in the username
    .WithTls(new MqttClientOptionsBuilderTlsParameters()
    {
        UseTls = true,
        Certificates = new X509Certificate2Collection(certificate)
    })

    .Build());

Console.WriteLine($"Client Connected: {mqttClient.IsConnected} with CONNACK: {connAck.ResultCode}");

mqttClient.ApplicationMessageReceivedAsync += async m => await Console.Out.WriteAsync($"Received message on topic: '{m.ApplicationMessage.Topic}' with content: '{m.ApplicationMessage.ConvertPayloadToString()}'\n\n");

var suback = await mqttClient.SubscribeAsync("contosotopics/topic1");
suback.Items.ToList().ForEach(s => Console.WriteLine($"subscribed to '{s.TopicFilter.Topic}' with '{s.ResultCode}'"));

while (true)
{
    var puback = await mqttClient.PublishStringAsync("contosotopics/topic1", "hello world!");
    Console.WriteLine(puback.ReasonString);
    await Task.Delay(1000);
}

Вы можете реплика байт и изменить один и тот же код для нескольких клиентов для публикации и подписки между клиентами.

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