Aracılığıyla paylaş


Hızlı Başlangıç: Azure CLI ile Event Grid ad alanında MQTT iletilerini yayımlama ve abone olma

Azure Event Grid MQTT aracı özelliği, MQTT protokolü kullanılarak mesajlaşmayı destekler. İstemciler (hem cihazlar hem de bulut uygulamaları), yüksek ölçekli yayın ve komut ve denetim gibi senaryolar için esnek hiyerarşik konular üzerinden MQTT iletileri yayımlayabilir ve abone olabilir.

Bu makalede, Azure CLI'yi kullanarak şunları yapmak için kullanılır:

  • Bir Event Grid ad alanı oluşturun ve MQTT aracısını etkinleştirin.
  • İstemciler, istemci grupları ve konu alanları gibi alt kaynaklar oluşturun.
  • İstemcilere konu alanlarını yayımlama ve abone olma erişimi verin.
  • MQTT iletilerini yayımlayın ve alın.

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Önkoşullar

  • Event Grid'i kullanmaya yeni başladıysanız, bu öğreticiyi başlatmadan önce Event Grid'e genel bakış'ı okuyun.
  • Event Grid kaynak sağlayıcısını Event Grid kaynak sağlayıcısını kaydetme başlığı altındaki adımlara göre kaydedin.
  • Güvenlik duvarınızda 8883 numaralı bağlantı noktasının açık olduğundan emin olun. Bu öğreticideki örnek, 8883 numaralı bağlantı noktası üzerinden iletişim kuran MQTT protokolunu kullanır. Bu bağlantı noktası bazı kurumsal ve eğitim ağı ortamlarında engellenebilir.
  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.
  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalıştırıyorsanız Azure CLI'yi bir Docker kapsayıcısında çalıştırmayı göz önünde bulundurun. Daha fazla bilgi için bkz . Azure CLI'yi Docker kapsayıcısında çalıştırma.
  • Yerel yükleme kullanıyorsanız komutunu kullanarak az login Azure CLI'da oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.
  • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.
  • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
  • Bu makale, Azure CLI'nın 2.53.1 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten yüklüdür.
  • Parmak izini oluşturmak ve istemci bağlantısının kimliğini doğrulamak için bir X.509 istemci sertifikasına ihtiyacınız vardır.
  • Event Grid ad alanı CLI belgelerini gözden geçirin.

Örnek istemci sertifikası ve parmak izi oluşturma

Henüz bir sertifikanız yoksa, CLI adımını kullanarak örnek bir sertifika oluşturabilirsiniz. Windows için el ile yüklemeyi göz önünde bulundurun.

CLI adımını kullanarak başarılı bir yüklemeden sonra, kullanıcı profili klasörünüzde bir komut istemi açın (Win+R türü %USERPROFILE%).

  1. Kök ve ara sertifikalar oluşturmak için aşağıdaki komutu çalıştırın. Sonraki adımda kullanmanız gereken parolayı unutmayın.

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. İstemci için bir sertifika oluşturmak için oluşturulan sertifika yetkilisi (CA) dosyalarını kullanın. komutundaki sertifika ve gizli dizi dosyaları için doğru yolu kullandığınızdan emin olun.

    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. Parmak izini görüntülemek için adım komutunu çalıştırın.

    step certificate fingerprint client1-authnID.pem
    

Ad alanı oluşturma

Ad alanı oluşturmak için komutunu kullanın. Komutunu kaynak grubunuz ve bir ad alanı adıyla güncelleştirin.

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

Hızlı başlangıcı basit tutmak için minimum özelliklere sahip bir ad alanı oluşturursunuz. Sihirbazın diğer sayfalarında ağ, güvenlik ve diğer ayarları yapılandırma hakkında ayrıntılı adımlar için bkz . Ad alanları oluşturma ve yönetme.

İstemciler oluşturma

İstemciyi oluşturmak için komutunu kullanın. Komutunu kaynak grubunuz ve bir ad alanı adıyla güncelleştirin.

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]}"
  • Hızlı başlangıcı basit tutmak için kimlik doğrulaması için parmak izi eşleşmesini kullanırsınız. İstemci kimlik doğrulaması için X.509 CA sertifika zincirini kullanma adımları için bkz . Sertifika zincirini kullanarak istemci kimlik doğrulaması.
  • Bu alıştırmada, ad alanı içindeki tüm istemcileri içeren varsayılan $all client grubu kullanacağız. İstemci özniteliklerini kullanarak özel istemci grupları oluşturma hakkında daha fazla bilgi edinmek için bkz . İstemci grupları.

Konu alanları oluşturma

Konu alanını oluşturmak için komutunu kullanın. Komutu kaynak grubu, ad alanı adı ve konu alanı adınızla güncelleştirin.

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

İzin bağlamaları oluşturma

az eventgrid Yayımcı izni için ilk izin bağlamasını oluşturmak için komutunu kullanın. Komutunu kaynak grubunuz, ad alanı adı ve izin bağlama adınızla güncelleştirin.

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}

komutunu kullanarak ikinci izin bağlamasını oluşturun. Komutunu kaynak grubunuz, ad alanı adı ve izin bağlama adınızla güncelleştirin. Bu izin bağlaması abonelere yöneliktir.

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 iletilerini yayımlama ve abone olma

Aşağıdaki örnek kod, bir ad alanına bağlanmayı ve yayımlamayı deneyen ve MQTT konusuna abone olan basit bir .NET yayımcısıdır. Kodu kullanarak gereksinimlerinize göre değişiklik yapabilir ve kodu Visual Studio'da veya sık kullandığınız araçlardan herhangi birinde çalıştırabilirsiniz.

Bu kodu çalıştırmak için NuGet'ten MQTTnet paketini (sürüm 4.1.4.563) yüklemeniz gerekir. (Visual Studio'da, Çözüm Gezgini proje adına sağ tıklayın, NuGet paketlerini yönet'e gidin ve MQTTnet'i arayın. MQTTnet paketi'ni seçin ve yükleyin.)

Not

Aşağıdaki örnek kod yalnızca tanıtım amaçlıdır ve üretim kullanımına yönelik değildir.

Bir konudaki bir MQTT iletisine bağlanmak, yayımlamak ve abone olmak için örnek C# kodu

Önemli

İstemci sertifika dosyalarınızın konumuna bağlı olarak istemci sertifikasını ve anahtar pem dosya yollarını güncelleştirin. Ayrıca, istemci kimlik doğrulaması adının ve konu bilgilerinin yapılandırmanızla eşleştiğinden emin olun.

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

Birden çok istemcinin istemciler arasında yayımlaması ve abone olması için aynı kodu çoğaltabilir ve değiştirebilirsiniz.

Sonraki adımlar