Megosztás a következőn keresztül:


Rövid útmutató: MQTT-üzenetek közzététele és feliratkozás egy Event Grid-névtéren az Azure CLI használatával

Az Azure Event Grid MQTT-közvetítő funkciója az MQTT protokoll használatával támogatja az üzenetküldést. Az ügyfelek (mind az eszközök, mind a felhőalkalmazások) rugalmas hierarchikus témakörökben tehetnek közzé és iratkozhatnak fel MQTT-üzenetekre olyan forgatókönyvek esetében, mint a nagy léptékű közvetítés, a parancsok és a vezérlés.

Ebben a cikkben az Azure CLI használatával:

  • Hozzon létre egy Event Grid-névteret, és engedélyezze az MQTT-közvetítőt.
  • Alforrásokat, például ügyfeleket, ügyfélcsoportokat és témakörtereket hozhat létre.
  • Hozzáférést biztosít az ügyfeleknek a témakörterek közzétételéhez és előfizetéséhez.
  • MQTT-üzenetek közzététele és fogadása.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Előfeltételek

  • Ha még nem ismerkedik az Event Gridszel, az oktatóanyag megkezdése előtt olvassa el az Event Grid áttekintését .
  • Regisztrálja az Event Grid-erőforrás-szolgáltatót az Event Grid-erőforrás-szolgáltató regisztrálásának lépései szerint.
  • Győződjön meg arról, hogy a 8883-as port nyitva van a tűzfalon. Az oktatóanyagban szereplő minta az MQTT protokollt használja, amely a 8883-es porton keresztül kommunikál. Ez a port néhány vállalati és oktatási hálózati környezetben blokkolva lehet.
  • Használja a Bash-környezetet az Azure Cloud Shellben. További információ: A Bash rövid útmutatója az Azure Cloud Shellben.
  • Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszeren fut, fontolja meg az Azure CLI docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
  • Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be a az login parancs használatával. A hitelesítési folyamat befejezéséhez kövesse a terminálban megjelenő lépéseket. További bejelentkezési lehetőségekért lásd : Bejelentkezés az Azure CLI-vel.
  • Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
  • Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
  • Ez a cikk az Azure CLI 2.53.1-es vagy újabb verzióját igényli. Ha Az Azure Cloud Shellt használja, a legújabb verzió már telepítve van.
  • Az ujjlenyomat létrehozásához és az ügyfélkapcsolat hitelesítéséhez X.509-ügyféltanúsítvány szükséges.
  • Tekintse át az Event Grid névtér parancssori felületének dokumentációját.

Minta ügyféltanúsítvány és ujjlenyomat létrehozása

Ha még nem rendelkezik tanúsítvánnyal, létrehozhat egy mintatanúsítványt a parancssori felület használatával. Fontolja meg a Windows manuális telepítését.

A parancssori felülettel végzett sikeres telepítés után nyisson meg egy parancssort a felhasználói profil mappájában (Win+R típus: %U Standard kiadás RPROFILE%).

  1. Gyökér- és köztes tanúsítványok létrehozásához futtassa a következő parancsot. Jegyezze meg a jelszót, amelyet a következő lépésben kell használnia.

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. Az ügyfél tanúsítványának létrehozásához használja a létrehozott hitelesítésszolgáltatói (CA-) fájlokat. Ügyeljen arra, hogy a parancs tanúsítvány- és titkos kulcsfájljainak helyes elérési útját használja.

    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. Az ujjlenyomat megtekintéséhez futtassa a lépésparancsot.

    step certificate fingerprint client1-authnID.pem
    

Névtér létrehozása

A parancs használatával hozzon létre egy névteret. Frissítse a parancsot az erőforráscsoporttal és egy névtérnévvel.

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

A rövid útmutató egyszerűségéhez hozzon létre egy minimális tulajdonságokkal rendelkező névteret. A hálózat, a biztonság és más beállítások a varázsló más lapjain való konfigurálásának részletes lépéseit a névterek létrehozása és kezelése című témakörben találja.

Ügyfelek létrehozása

A parancs használatával hozza létre az ügyfelet. Frissítse a parancsot az erőforráscsoporttal és egy névtérnévvel.

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]}"
  • A rövid útmutató egyszerűségéhez ujjlenyomat-egyezést használ a hitelesítéshez. Az X.509 hitelesítésszolgáltatói tanúsítványlánc ügyfélhitelesítéshez való használatával kapcsolatos lépésekért tekintse meg az ügyfél-hitelesítés tanúsítványlánc használatával történő használatát ismertető szakaszt.
  • Ebben a gyakorlatban az alapértelmezett $all client csoportot használjuk, amely a névtérben lévő összes ügyfelet tartalmazza. Ha többet szeretne megtudni az egyéni ügyfélcsoportok ügyfélattribútumok használatával történő létrehozásáról, olvassa el az Ügyfélcsoportok című témakört.

Témakörtér létrehozása

A parancs használatával hozza létre a témakörterületet. Frissítse a parancsot az erőforráscsoporttal, a névtér nevével és a témakörtér nevével.

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

Engedélykötések létrehozása

az eventgrid A paranccsal hozza létre az első engedélykötést a közzétevői engedélyhez. Frissítse a parancsot az erőforráscsoporttal, a névtér nevével és az engedélykötés nevével.

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}

A parancs használatával hozza létre a második engedélykötést. Frissítse a parancsot az erőforráscsoporttal, a névtér nevével és az engedélykötés nevével. Ez az engedélykötés az előfizetők számára készült.

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-üzenetek közzététele és előfizetése

Az alábbi mintakód egy egyszerű .NET-közzétevő, amely egy névtérhez próbál csatlakozni és közzétenni, és feliratkozik az MQTT-témakörre. A kódot a követelményeknek megfelelően módosíthatja, és futtathatja a kódot a Visual Studióban vagy bármely kedvenc eszközén.

A kód futtatásához telepítenie kell az MQTTnet-csomagot (4.1.4.563-es verzió) a NuGetből. (A Visual Studióban kattintson a jobb gombbal a projekt nevére a Megoldáskezelő, nyissa meg a NuGet-csomagok kezelését, és keresse meg az MQTTnetet. Válassza ki az MQTTnet-csomagot, és telepítse.)

Feljegyzés

Az alábbi mintakód csak bemutató célokra szolgál, és nem éles használatra készült.

Minta C#-kód egy ügyfél csatlakoztatásához, közzétételéhez és előfizetéséhez egy MQTT-üzenetre egy témakörben

Fontos

Frissítse az ügyféltanúsítványt és a kulcs pem fájl elérési útját az ügyféltanúsítvány-fájlok helyétől függően. Győződjön meg arról is, hogy az ügyfélhitelesítés neve és a témakör adatai egyeznek a konfigurációval.

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

Replikálhatja és módosíthatja ugyanazt a kódot több ügyfél esetében az ügyfelek közötti közzétételhez és előfizetéshez.

Következő lépések