Szybki start: publikowanie i subskrybowanie komunikatów MQTT w przestrzeni nazw usługi Event Grid przy użyciu interfejsu wiersza polecenia platformy Azure

Funkcja brokera MQTT usługi Azure Event Grid obsługuje komunikaty przy użyciu protokołu MQTT. Klienci (zarówno urządzenia, jak i aplikacje w chmurze) mogą publikować i subskrybować komunikaty MQTT w elastycznych tematach hierarchicznych dla scenariuszy, takich jak emisja na dużą skalę i sterowanie i kontrola.

W tym artykule użyjesz interfejsu wiersza polecenia platformy Azure do:

  • Utwórz przestrzeń nazw usługi Event Grid i włącz brokera MQTT.
  • Utwórz podźródła, takie jak klienci, grupy klientów i przestrzenie tematów.
  • Udziel klientom dostępu do publikowania i subskrybowania obszarów tematów.
  • Publikowanie i odbieranie komunikatów MQTT.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

  • Jeśli dopiero zaczynasz korzystać z usługi Event Grid, zapoznaj się z omówieniem usługi Event Grid przed rozpoczęciem tego samouczka.
  • Zarejestruj dostawcę zasobów usługi Event Grid zgodnie z krokami w temacie Rejestrowanie dostawcy zasobów usługi Event Grid.
  • Upewnij się, że port 8883 jest otwarty w zaporze. Przykład w tym samouczku używa protokołu MQTT, który komunikuje się za pośrednictwem portu 8883. Ten port może zostać zablokowany w niektórych środowiskach sieci firmowych i edukacyjnych.
  • Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
  • Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze platformy Docker. Aby uzyskać więcej informacji, zobacz Uruchamianie interfejsu wiersza polecenia platformy Azure w kontenerze platformy Docker.
  • Jeśli używasz instalacji lokalnej, zaloguj się do interfejsu az login wiersza polecenia platformy Azure przy użyciu polecenia . Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
  • Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
  • Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
  • Ten artykuł wymaga wersji 2.53.1 lub nowszej interfejsu wiersza polecenia platformy Azure. Jeśli używasz usługi Azure Cloud Shell, najnowsza wersja jest już zainstalowana.
  • Potrzebny jest certyfikat klienta X.509 do wygenerowania odcisku palca i uwierzytelnienia połączenia klienta.
  • Zapoznaj się z dokumentacją interfejsu wiersza polecenia przestrzeni nazw usługi Event Grid.

Generowanie przykładowego certyfikatu klienta i odcisku palca

Jeśli nie masz jeszcze certyfikatu, możesz utworzyć przykładowy certyfikat przy użyciu interfejsu wiersza polecenia kroku. Rozważ ręczne instalowanie dla systemu Windows.

Po pomyślnej instalacji przy użyciu interfejsu wiersza polecenia kroku otwórz wiersz polecenia w folderze profilu użytkownika (Win+R wpisz %USERPROFILE%).

  1. Aby utworzyć certyfikaty główne i pośrednie, uruchom następujące polecenie. Zapamiętaj hasło, które należy użyć w następnym kroku.

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. Użyj plików urzędu certyfikacji wygenerowanych w celu utworzenia certyfikatu dla klienta. Upewnij się, że w poleceniu użyto poprawnej ścieżki dla plików certyfikatów i wpisów tajnych.

    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. Aby wyświetlić odcisk palca, uruchom polecenie kroku.

    step certificate fingerprint client1-authnID.pem
    

Tworzenie przestrzeni nazw

Użyj polecenia , aby utworzyć przestrzeń nazw. Zaktualizuj polecenie przy użyciu grupy zasobów i nazwy przestrzeni nazw.

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

Aby zachować prosty przewodnik Szybki start, należy utworzyć przestrzeń nazw z minimalnymi właściwościami. Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania sieci, zabezpieczeń i innych ustawień na innych stronach kreatora, zobacz Tworzenie przestrzeni nazw i zarządzanie nimi.

Tworzenie klientów

Użyj polecenia , aby utworzyć klienta. Zaktualizuj polecenie przy użyciu grupy zasobów i nazwy przestrzeni nazw.

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]}"
  • Aby zachować prosty przewodnik Szybki start, użyj dopasowania odcisku palca do uwierzytelniania. Aby uzyskać instrukcje dotyczące używania łańcucha certyfikatów X.509 urzędu certyfikacji do uwierzytelniania klienta, zobacz Uwierzytelnianie klienta przy użyciu łańcucha certyfikatów.
  • W tym ćwiczeniu użyjemy grupy domyślnej $all client zawierającej wszystkich klientów w przestrzeni nazw. Aby dowiedzieć się więcej na temat tworzenia niestandardowych grup klientów przy użyciu atrybutów klienta, zobacz Grupy klientów.

Tworzenie obszarów tematów

Użyj polecenia , aby utworzyć przestrzeń tematu. Zaktualizuj polecenie przy użyciu grupy zasobów, nazwy przestrzeni nazw i nazwy obszaru tematu.

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

Tworzenie powiązań uprawnień

Użyj polecenia , az eventgrid aby utworzyć pierwsze powiązanie uprawnień dla uprawnień wydawcy. Zaktualizuj polecenie przy użyciu grupy zasobów, nazwy przestrzeni nazw i nazwy powiązania uprawnień.

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}

Użyj polecenia , aby utworzyć drugie powiązanie uprawnień. Zaktualizuj polecenie przy użyciu grupy zasobów, nazwy przestrzeni nazw i nazwy powiązania uprawnień. To powiązanie uprawnień dotyczy subskrybentów.

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}

Publikowanie i subskrybowanie komunikatów MQTT

Poniższy przykładowy kod to prosty wydawca platformy .NET, który próbuje nawiązać połączenie i opublikować w przestrzeni nazw i subskrybuje temat MQTT. Możesz użyć kodu, aby zmodyfikować zgodnie z wymaganiami i uruchomić kod w programie Visual Studio lub dowolnym z ulubionych narzędzi.

Aby uruchomić ten kod, należy zainstalować pakiet MQTTnet (wersja 4.1.4.563) z pakietu NuGet. (W programie Visual Studio kliknij prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań, przejdź do pozycji Zarządzanie pakietami NuGet i wyszukaj pozycję MQTnet. Wybierz pakiet MQTTnet i zainstaluj.

Uwaga

Poniższy przykładowy kod jest przeznaczony tylko do celów demonstracyjnych i nie jest przeznaczony do użytku produkcyjnego.

Przykładowy kod języka C# umożliwiający łączenie klienta, publikowanie i subskrybowanie komunikatu MQTT w temacie

Ważne

Zaktualizuj ścieżki pliku pem i certyfikatu klienta w zależności od lokalizacji plików certyfikatów klienta. Upewnij się również, że nazwa uwierzytelniania klienta i informacje o temacie są zgodne z konfiguracją.

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

Można replikować i modyfikować ten sam kod dla wielu klientów, aby publikować i subskrybować wśród klientów.

Następne kroki