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%).
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
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
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.