Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы используете функцию брокера MQTT сетки событий Azure для поддержки обмена сообщениями с помощью протокола MQTT. Клиенты, включая устройства и облачные приложения, могут публиковать и подписываться на сообщения MQTT по гибким иерархическим темам для таких сценариев, как широковещательная трансляция и команды управления.
В этой статье вы используете Azure CLI для:
- Создайте пространство имен Event Grid и включите брокер MQTT.
- Создайте подресурсы, такие как клиенты, группы клиентов и пространства тем.
- Предоставьте клиентам доступ к публикации и подписке на тематические пространства.
- Публикация и получение сообщений MQTT.
Если у вас нет подписки на Azure, создайте бесплатную учетную запись Azure перед началом.
Предпосылки
- Если вы не знакомы с Сеткой событий, ознакомьтесь с общими сведениями о сетке событий перед началом работы с этим руководством.
- Зарегистрируйте поставщик ресурсов сетки событий в соответствии с инструкциями, описанными в разделе "Регистрация поставщика ресурсов сетки событий".
- Убедитесь, что в брандмауэре открыт порт 8883. В этом руководстве используется протокол MQTT, который взаимодействует через порт 8883. Этот порт может быть заблокирован в некоторых корпоративных и образовательных сетевых средах.
- Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
- Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, попробуйте запустить Azure CLI в контейнере Docker. Дополнительные сведения см. в разделе "Запуск Azure CLI" в контейнере Docker.
- Если вы используете локальную установку, войдите в Azure CLI с помощью
az loginкоманды. Чтобы завершить процесс проверки подлинности, выполните действия, которые отображаются в терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI". - Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье "Управление расширениями Azure CLI".
- Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Для этой статьи требуется версия 2.53.1 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
- Для создания отпечатка и проверки подлинности подключения клиента требуется сертификат клиента X.509.
- Просмотрите команды CLI пространства имен сетки событий.
Создайте пример клиентского сертификата и его отпечаток
Если у вас еще нет сертификата, можно создать пример сертификата с помощью шага CLI. Рассмотрите возможность установки вручную для Windows.
После успешной установки с помощью шага CLI откройте окно командной строки в папке профиля пользователя (Win+R type %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.
step certificate fingerprint client1-authnID.pem
Создайте пространство имен
Используйте эту команду для создания пространства имен. Обновите команду, указав вашу группу ресурсов и имя пространства имен.
az eventgrid namespace create --resource-group {Resource Group} --name {Namespace Name} --topic-spaces-configuration "{state:Enabled}"
Чтобы упростить это краткое руководство, создайте пространство имен с минимальными свойствами. Дополнительные сведения о сети, безопасности и параметрах на других вкладках см. в статье "Создание пространств имен и управление ими".
Создание клиентов
Используйте эту команду для создания клиента. Обновите команду, указав вашу группу ресурсов и имя пространства имен.
az eventgrid namespace client create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {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 --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Topicspace Name} --topic-templates ['contosotopics/topic1']
Создание привязок разрешений
Используйте команду az eventgrid, чтобы создать первое связывание разрешений для разрешения издателя. Обновите команду, указав группу ресурсов, имя пространства имен и имя привязки разрешений.
az eventgrid namespace permission-binding create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {Permission Binding Name} --client-group-name '$all' --permission publisher --topic-space-name {Topicspace Name}
Используйте эту команду для создания второй привязки разрешений. Обновите команду, указав группу ресурсов, имя пространства имен и имя привязки разрешений. Эта привязка разрешений для подписчиков.
az eventgrid namespace permission-binding create --resource-group {Resource Group} --namespace-name {Namespace Name} --name {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);
}
Вы можете реплицировать и изменить один и тот же код для нескольких клиентов для публикации и подписки между клиентами.
Связанный контент
- Руководство. Маршрутизация сообщений MQTT в Центры событий Azure с помощью разделов пространства имен
- Руководство: Направление сообщений MQTT в Функции Azure с использованием пользовательских тем
Примеры кода см. в этом репозитории GitHub.