Bagikan melalui


Mulai cepat: Menerbitkan dan berlangganan pesan MQTT di namespace Layanan Event Grid dengan Azure CLI

Fitur broker Azure Event Grid MQTT mendukung olahpesan dengan menggunakan protokol MQTT. Klien (perangkat dan aplikasi cloud) dapat menerbitkan dan berlangganan pesan MQTT melalui topik hierarkis yang fleksibel untuk skenario seperti siaran dan perintah dan kontrol skala tinggi.

Dalam artikel ini, Anda menggunakan Azure CLI untuk:

  • Buat namespace Layanan Event Grid dan aktifkan broker MQTT.
  • Buat sub sumber daya seperti klien, grup klien, dan ruang topik.
  • Berikan klien akses untuk menerbitkan dan berlangganan ruang topik.
  • Menerbitkan dan menerima pesan MQTT.

Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.

Prasyarat

  • Jika Anda baru menggunakan Event Grid, baca gambaran umum Event Grid sebelum Anda memulai tutorial ini.
  • Daftarkan penyedia sumber daya Event Grid sesuai dengan langkah-langkah di Mendaftarkan penyedia sumber daya Event Grid.
  • Pastikan port 8883 terbuka di firewall Anda. Sampel dalam tutorial ini menggunakan protokol MQTT, yang berkomunikasi melalui port 8883. Port ini mungkin diblokir di beberapa lingkungan jaringan perusahaan dan pendidikan.
  • Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
  • Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan di Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi selengkapnya, lihat Menjalankan Azure CLI dalam kontainer Docker.
  • Jika Anda menggunakan penginstalan lokal, masuk ke Azure CLI dengan menggunakan az login perintah . Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang muncul di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
  • Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
  • Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
  • Artikel ini memerlukan Azure CLI versi 2.53.1 atau yang lebih baru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terpasang.
  • Anda memerlukan sertifikat klien X.509 untuk menghasilkan thumbprint dan mengautentikasi koneksi klien.
  • Tinjau dokumentasi CLI namespace Layanan Domain Event Grid.

Membuat sampel sertifikat klien dan thumbprint

Jika Anda belum memiliki sertifikat, Anda dapat membuat sertifikat sampel dengan menggunakan langkah CLI. Pertimbangkan untuk menginstal secara manual untuk Windows.

Setelah penginstalan berhasil dengan menggunakan langkah CLI, buka perintah di folder profil pengguna Anda (Win+R ketik %USERPROFILE%).

  1. Untuk membuat sertifikat akar dan menengah, jalankan perintah berikut. Ingat kata sandi, yang perlu Anda gunakan di langkah berikutnya.

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. Gunakan file otoritas sertifikat (CA) yang dihasilkan untuk membuat sertifikat untuk klien. Pastikan untuk menggunakan jalur yang benar untuk file sertifikasi dan rahasia dalam perintah.

    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. Untuk melihat thumbprint, jalankan perintah langkah.

    step certificate fingerprint client1-authnID.pem
    

Membuat namespace

Gunakan perintah untuk membuat namespace. Perbarui perintah dengan grup sumber daya anda dan nama namespace.

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

Agar mulai cepat tetap sederhana, Anda membuat namespace dengan properti minimal. Untuk langkah-langkah terperinci tentang mengonfigurasi jaringan, keamanan, dan pengaturan lain di halaman panduan lainnya, lihat Membuat dan mengelola namespace layanan.

Membuat klien

Gunakan perintah untuk membuat klien. Perbarui perintah dengan grup sumber daya anda dan nama namespace.

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]}"
  • Agar mulai cepat tetap sederhana, Anda menggunakan kecocokan thumbprint untuk autentikasi. Untuk langkah-langkah tentang cara menggunakan rantai sertifikat CA X.509 untuk autentikasi klien, lihat Autentikasi klien menggunakan rantai sertifikat.
  • Untuk latihan ini, kami menggunakan grup default $all client , yang mencakup semua klien di namespace layanan. Untuk mempelajari selengkapnya tentang membuat grup klien kustom dengan menggunakan atribut klien, lihat Grup klien.

Membuat spasi topik

Gunakan perintah untuk membuat ruang topik. Perbarui perintah dengan grup sumber daya, nama namespace, dan nama ruang topik Anda.

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

Membuat pengikatan izin

az eventgrid Gunakan perintah untuk membuat pengikatan izin pertama untuk izin penerbit. Perbarui perintah dengan grup sumber daya, nama namespace, dan nama pengikatan izin Anda.

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}

Gunakan perintah untuk membuat pengikatan izin kedua. Perbarui perintah dengan grup sumber daya, nama namespace, dan nama pengikatan izin Anda. Pengikatan izin ini untuk pelanggan.

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}

Menerbitkan dan berlangganan pesan MQTT

Kode sampel berikut adalah penerbit .NET sederhana yang mencoba menyambungkan dan menerbitkan ke namespace layanan dan berlangganan topik MQTT. Anda dapat menggunakan kode untuk memodifikasi sesuai dengan kebutuhan Anda dan menjalankan kode di Visual Studio atau alat favorit Anda.

Anda perlu menginstal paket MQTTnet (versi 4.1.4.563) dari NuGet untuk menjalankan kode ini. (Di Visual Studio, klik kanan nama proyek di Penjelajah Solusi, buka Mengelola paket NuGet, dan cari MQTTnet. Pilih paket MQTTnet dan instal.)

Catatan

Kode sampel berikut hanya untuk tujuan demonstrasi dan tidak ditujukan untuk penggunaan produksi.

Sampel kode C# untuk menyambungkan klien, menerbitkan, dan berlangganan pesan MQTT pada topik

Penting

Perbarui sertifikat klien dan jalur file pem kunci tergantung pada lokasi file sertifikat klien Anda. Selain itu, pastikan bahwa nama autentikasi klien dan informasi topik cocok dengan konfigurasi Anda.

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

Anda dapat mereplikasi dan memodifikasi kode yang sama bagi beberapa klien untuk menerbitkan dan berlangganan di antara klien.

Langkah berikutnya