Краткое руководство. Публикация и подписка на сообщения 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%).
Чтобы создать корневые и промежуточные сертификаты, выполните следующую команду. Помните пароль, который необходимо использовать на следующем шаге.
step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
Используйте файлы центра сертификации (ЦС), созданные для создания сертификата для клиента. Убедитесь, что в команде используется правильный путь к файлам сертификатов и секретов.
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
Чтобы просмотреть отпечаток, выполните команду шага.
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);
}
Вы можете реплика байт и изменить один и тот же код для нескольких клиентов для публикации и подписки между клиентами.