Rychlý start: Publikování a přihlášení k odběru zpráv MQTT v oboru názvů Event Gridu pomocí Azure CLI

Funkce zprostředkovatele Azure Event Grid MQTT podporuje zasílání zpráv pomocí protokolu MQTT. Klienti (zařízení i cloudové aplikace) můžou publikovat a odebírat zprávy MQTT prostřednictvím flexibilních hierarchických témat pro scénáře, jako je vysílání ve velkém měřítku a řízení a řízení.

V tomto článku použijete Azure CLI k:

  • Vytvořte obor názvů Event Gridu a povolte zprostředkovatele MQTT.
  • Vytvořte podsourcy, jako jsou klienti, skupiny klientů a prostory témat.
  • Udělte klientům přístup k publikování a přihlášení k odběru prostorů témat.
  • Publikování a příjem zpráv MQTT

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Požadavky

  • Pokud s Event Gridem teprve začínáte, přečtěte si přehled služby Event Grid před zahájením tohoto kurzu.
  • Podle kroků v registraci poskytovatele prostředků Event Gridu zaregistrujte poskytovatele prostředků Event Gridu.
  • Ujistěte se, že je v bráně firewall otevřený port 8883. Ukázka v tomto kurzu používá protokol MQTT, který komunikuje přes port 8883. Tento port může být blokovaný v některých podnikových a vzdělávacích síťových prostředích.
  • Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
  • Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Dockeru. Další informace najdete v tématu Spuštění Azure CLI v kontejneru Dockeru.
  • Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí az login příkazu. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených v terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
  • Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
  • Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
  • Tento článek vyžaduje verzi 2.53.1 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
  • K vygenerování kryptografického otisku a ověření připojení klienta potřebujete klientský certifikát X.509.
  • Projděte si dokumentaci k rozhraní příkazového řádku oboru názvů Event Gridu.

Vygenerování ukázkového klientského certifikátu a kryptografického otisku

Pokud ještě certifikát nemáte, můžete si pomocí krokového rozhraní příkazového řádku vytvořit ukázkový certifikát. Zvažte ruční instalaci pro Windows.

Po úspěšné instalaci pomocí podrobného rozhraní příkazového řádku otevřete příkazový řádek ve složce profilu uživatele (Win+R typ %USERPROFILE%).

  1. Pokud chcete vytvořit kořenové a zprostředkující certifikáty, spusťte následující příkaz. Nezapomeňte si heslo, které je potřeba použít v dalším kroku.

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. Pomocí souborů certifikační autority (CA) vygenerovaných vytvořte certifikát pro klienta. Ujistěte se, že v příkazu používáte správnou cestu pro soubory certifikátů a tajných kódů.

    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. Pokud chcete zobrazit kryptografický otisk, spusťte příkaz kroku.

    step certificate fingerprint client1-authnID.pem
    

Vytvoření oboru názvů

Pomocí příkazu vytvořte obor názvů. Aktualizujte příkaz se skupinou prostředků a názvem oboru názvů.

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

Pokud chcete rychlý start zachovat jednoduchý, vytvoříte obor názvů s minimálními vlastnostmi. Podrobný postup konfigurace sítě, zabezpečení a dalších nastavení na jiných stránkách průvodce najdete v tématu Vytváření a správa oborů názvů.

Vytváření klientů

Pomocí příkazu vytvořte klienta. Aktualizujte příkaz se skupinou prostředků a názvem oboru názvů.

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]}"
  • K jednoduchému rychlému startu použijete pro ověřování shodu kryptografického otisku. Postup použití řetězu certifikátů certifikační autority X.509 pro ověřování klientů najdete v tématu Ověřování klientů pomocí řetězu certifikátů.
  • V tomto cvičení použijeme výchozí $all client skupinu, která zahrnuje všechny klienty v oboru názvů. Další informace o vytváření vlastních skupin klientů pomocí atributů klienta najdete v tématu Skupiny klientů.

Vytváření prostorů témat

Pomocí příkazu vytvořte prostor tématu. Aktualizujte příkaz pomocí skupiny prostředků, názvu oboru názvů a názvu prostoru tématu.

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

Vytváření vazeb oprávnění

az eventgrid Pomocí příkazu vytvořte první vazbu oprávnění pro oprávnění vydavatele. Aktualizujte příkaz pomocí skupiny prostředků, názvu oboru názvů a názvu vazby oprávnění.

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}

Pomocí příkazu vytvořte druhou vazbu oprávnění. Aktualizujte příkaz pomocí skupiny prostředků, názvu oboru názvů a názvu vazby oprávnění. Tato vazba oprávnění je určená pro předplatitele.

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

Publikování a přihlášení k odběru zpráv MQTT

Následující ukázkový kód je jednoduchý vydavatel .NET, který se pokusí připojit a publikovat do oboru názvů a přihlásí se k odběru tématu MQTT. Kód můžete použít k úpravě podle vašeho požadavku a spuštění kódu v sadě Visual Studio nebo libovolném z vašich oblíbených nástrojů.

Abyste mohli tento kód spustit, musíte z NuGetu nainstalovat balíček MQTTnet (verze 4.1.4.563). (V sadě Visual Studio klikněte pravým tlačítkem na název projektu v Průzkumník řešení, přejděte na Spravovat balíčky NuGet a vyhledejte MQTTnet. Vyberte balíček MQTTnet a nainstalujte.)

Poznámka:

Následující ukázkový kód slouží pouze pro demonstrační účely a není určený pro produkční použití.

Ukázkový kód jazyka C# pro připojení klienta, publikování a přihlášení k odběru zprávy MQTT v tématu

Důležité

V závislosti na umístění souborů klientských certifikátů aktualizujte klientský certifikát a cesty k souborům pem klíče. Ujistěte se také, že informace o ověřovacím názvu klienta a tématu odpovídají vaší konfiguraci.

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);
}

Můžete replikovat a upravovat stejný kód pro více klientů k publikování a přihlášení k odběru mezi klienty.

Další kroky