Bagikan melalui


Mengirim pesan ke topik Azure Service Bus dan menerima pesan dari langganan ke topik (Python)

Dalam tutorial ini, Anda menyelesaikan langkah-langkah berikut:

  1. Membuat namespace Azure Service Bus menggunakan portal Microsoft Azure.
  2. Buat topik Bus Layanan, menggunakan portal Microsoft Azure.
  3. Buat langganan Bus Layanan untuk topik tersebut, menggunakan portal Microsoft Azure.
  4. Tulis aplikasi Python untuk menggunakan paket azure-servicebus untuk:
    • Kirim sekumpulan pesan ke topik tersebut.
    • Terima pesan tersebut dari langganan.

Catatan

Mulai cepat ini menyediakan instruksi langkah demi langkah untuk skenario sederhana mengirim batch pesan ke topik Bus Layanan dan menerima pesan tersebut dari langganan topik. Anda dapat menemukan sampel Python bawaan untuk Azure Bus Layanan di repositori Azure SDK for Python di GitHub.

Prasyarat

Catatan

Tutorial ini berfungsi dengan sampel yang dapat Anda salin dan jalankan menggunakan Python. Untuk instruksi tentang cara membuat aplikasi Python, lihat Membuat dan menyebarkan aplikasi Python ke Situs Web Azure. Untuk informasi selengkapnya tentang menginstal paket yang digunakan dalam tutorial ini, lihat Panduan Penginstalan Python.

Membuat namespace layanan di portal Microsoft Azure

Untuk memulai penggunaan entitas olahpesan Azure Service Bus, buat namespace dengan nama yang unik di Azure. Namespace menyediakan wadah cakupan untuk sumber daya Service Bus, seperti antrean dan topik, di aplikasi Anda.

Untuk membuat namespace layanan:

  1. Masuk ke portal Azure.

  2. Pilih menu flyout dari kiri atas dan navigasi ke halaman Semua layanan.

  3. Di bilah navigasi kiri, pilih Integrasi.

  4. Gulir ke bawah ke layanan Olahpesan>Service Bus dan pilih Buat.

    Cuplikan layar memperlihatkan pilihan Buat sumber daya, Integrasi, lalu Bus Layanan di menu.

  5. Di tab Dasar dari halaman Buat namespace layanan, ikuti langkah-langkah berikut:

    1. Untuk Langganan, pilih langganan Azure untuk membuat namespace layanan.

    2. Untuk Grup sumber daya, pilih grup sumber daya yang sudah ada, atau buat yang baru.

    3. Masukkan nama namespace yang memenuhi konvensi penamaan berikut:

      • Nama yang Anda pilih harus unik di seluruh Azure. Sistem akan segera memeriksa untuk melihat apakah nama tersebut tersedia.
      • Panjang nama minimal 6 dan maksimal 50 karakter.
      • Nama hanya boleh berisi huruf, angka, tanda hubung -.
      • Nama harus dimulai dengan huruf dan diakhiri dengan huruf atau angka.
      • Nama tidak diakhir dengan -sb atau -mgmt.
    4. Untuk Lokasi, pilih wilayah untuk menghosting namespace Anda.

    5. Untuk Tingkat harga, pilih tingkat harga (Dasar, Standar, atau Premium) untuk kumpulan namanya. Untuk mulai cepat ini, pilih Standar.

      Jika Anda memilih tingkat Premium, Anda dapat mengaktifkan replikasi geografis untuk namespace. Fitur replikasi geografis memastikan bahwa metadata dan data namespace terus direplikasi dari wilayah utama ke satu atau beberapa wilayah sekunder.

      Penting

      Jika Anda ingin menggunakan topik dan langganan, pilih Standar atau Premium. Topik dan langganan tidak didukung di tingkat harga Dasar.

      Jika Anda memilih tingkat harga Premium, tentukan jumlah unit olahpesan. Tingkat premium menyediakan isolasi sumber daya di tingkat CPU dan memori sehingga setiap beban kerja berjalan dalam isolasi. Kontainer sumber daya ini disebut unit olahpesan. Namespace layanan premium memiliki setidaknya satu unit Olahpesan. Anda dapat membeli 1, 2, 4, 8, atau 16 unit Olahpesan untuk setiap namespace layanan Service Bus Premium. Untuk informasi selengkapnya, lihat Tingkat pesan premium Service Bus.

    6. Pilih Tinjau + buat di bagian bawah halaman.

      Cuplikan layar memperlihatkan halaman Buat namespace

    7. Pada halaman Tinjau + buat, tinjau pengaturan, dan pilih Buat.

  6. Setelah penyebaran sumber daya berhasil, pilih Buka sumber daya di halaman penyebaran.

    Cuplikan layar memperlihatkan halaman penyebaran berhasil dengan tautan Buka sumber daya.

  7. Anda melihat beranda untuk namespace layanan bus layanan Anda.

    Cuplikan layar memperlihatkan beranda namespace Service Bus yang dibuat.

Membuat topik menggunakan portal Microsoft Azure

  1. Pada halaman Bus Layanan Namespace, perluas Entitas pada menu navigasi di sebelah kiri, dan pilih Topik di menu sebelah kiri.

  2. Pilih + Topik di toolbar.

  3. Masukkan nama untuk topik. Biarkan opsi lain dengan nilai defaultnya.

  4. Pilih Buat.

    Cuplikan layar yang memperlihatkan halaman Buat topik di portal Azure.

Membuat langganan untuk topik tersebut

  1. Pilih topik yang Anda buat di sesi sebelumnya.

    Cuplikan layar yang memperlihatkan pilihan topik dari daftar topik.

  2. Di halaman Topik Bus Layanan, pilih + Langganan di bar alat.

    Cuplikan layar yang memperlihatkan tombol Tambahkan langganan di halaman Topik.

  3. Di halaman Membuat Langganan, ikuti langkah-langkah berikut:

    1. Masukkan S1 untuk nama langganan.

    2. Lalu, pilih Buat untuk membuat langganan.

      Cuplikan layar yang memperlihatkan halaman Buat langganan.

Mengautentikasi aplikasi ke Azure

Artikel ini memperlihatkan kepada Anda dua cara menyambungkan ke Azure Service Bus: tanpa kata sandi dan string koneksi.

Opsi pertama menunjukkan kepada Anda cara menggunakan prinsip keamanan Anda di ID Microsoft Entra dan kontrol akses berbasis peran (RBAC) untuk menyambungkan ke namespace Bus Layanan. Anda tidak perlu khawatir memiliki string koneksi yang dikodekan secara permanen dalam kode Anda, dalam file konfigurasi, atau di penyimpanan aman seperti Azure Key Vault.

Opsi kedua menunjukkan cara menggunakan string koneksi untuk menyambungkan ke namespace Bus Layanan. Jika Anda baru menggunakan Azure, Anda mungkin menemukan opsi string koneksi lebih mudah diikuti. Sebaiknya gunakan opsi tanpa kata sandi di aplikasi dunia nyata dan lingkungan produksi. Untuk informasi selengkapnya, lihat Autentikasi dan otorisasi Azure Service Bus. Untuk membaca selengkapnya tentang autentikasi tanpa kata sandi, lihat Mengautentikasi aplikasi .NET.

Menetapkan peran ke pengguna Microsoft Entra Anda

Saat Anda mengembangkan secara lokal, pastikan bahwa akun pengguna yang tersambung ke Azure Service Bus memiliki izin yang benar. Anda memerlukan peran Pemilik Data Azure Service Bus untuk mengirim dan menerima pesan. Untuk menetapkan sendiri peran ini, Anda memerlukan peran Administrator Akses Pengguna, atau peran lain yang menyertakan tindakan Microsoft.Authorization/roleAssignments/write.

Anda dapat menetapkan peran Azure RBAC kepada pengguna menggunakan portal Azure, Azure CLI, atau Azure PowerShell. Untuk mempelajari selengkapnya cakupan yang tersedia untuk penetapan peran, lihat Memahami cakupan untuk Azure RBAC.

Contoh berikut menetapkan peran ke Azure Service Bus Data Owner akun pengguna Anda, yang menyediakan akses penuh ke sumber daya Azure Bus Layanan. Dalam skenario nyata, ikuti prinsip hak istimewa paling sedikit untuk memberi pengguna hanya izin minimum yang diperlukan untuk lingkungan produksi yang lebih aman.

Peran bawaan untuk Azure Service Bus

Untuk Azure Service Bus, pengelolaan namespace dan semua sumber daya terkait melalui portal Microsoft Azure dan AZURE Resource Management API sudah dilindungi menggunakan model Azure RBAC. Azure menyediakan peran bawaan Azure berikut untuk mengotorisasi akses ke namespace Bus Layanan:

  • Pemilik Data Azure Service Bus: Memungkinkan akses data ke namespace Service Bus dan entitasnya, termasuk antrean, topik, langganan, dan filter. Anggota peran ini dapat mengirim dan menerima pesan dari antrean atau topik/langganan.
  • Pengirim Data Azure Service Bus: Gunakan peran ini untuk memberikan send akses ke namespace Service Bus dan entitasnya.
  • Penerima Data Azure Service Bus: Gunakan peran ini untuk memberikan receive akses ke namespace Service Bus dan entitasnya.

Jika Anda ingin membuat peran kustom, lihat Hak yang diperlukan untuk operasi Bus Layanan.

Menambahkan pengguna Microsoft Entra ke peran Pemilik Bus Layanan Azure

Tambahkan nama pengguna Microsoft Entra Anda ke peran Pemilik Data Azure Bus Layanan di tingkat namespace Bus Layanan. Konfigurasi ini memungkinkan aplikasi yang berjalan dalam konteks akun pengguna Anda untuk mengirim pesan ke antrean atau topik. Ini dapat menerima pesan dari antrean atau langganan topik.

Penting

Dalam kebanyakan kasus, dibutuhkan satu atau dua menit agar penetapan peran disebarluaskan di Azure. Dalam kasus yang jarang terjadi, mungkin perlu waktu hingga delapan menit. Jika Anda menerima kesalahan autentikasi saat pertama kali menjalankan kode, tunggu beberapa saat dan coba lagi.

  1. Jika Anda tidak membuka halaman Bus Layanan Namespace layanan di portal Azure, temukan namespace Bus Layanan Anda menggunakan bilah pencarian utama atau navigasi kiri.

  2. Pada halaman Gambaran Umum , pilih Kontrol akses (IAM) dari menu sebelah kiri.

  3. Di halaman Kontrol akses (IAM), pilih tab Penetapan peran.

  4. Pilih + Tambahkan dari menu atas lalu Tambahkan penetapan peran.

    Cuplikan layar yang menampilkan cara menetapkan peran.

  5. Gunakan kotak pencarian untuk memfilter hasil ke peran yang diinginkan. Untuk contoh ini, cari Azure Service Bus Data Owner dan pilih hasil yang cocok. Kemudian pilih Berikutnya.

  6. Di bagian Tetapkan akses ke, pilih Pengguna, grup, atau perwakilan layanan, lalu pilih + Pilih anggota.

  7. Dalam dialog, cari nama pengguna Microsoft Entra Anda (biasanya alamat email user@domain Anda) lalu pilih Pilih di bagian bawah dialog.

  8. Pilih Tinjau + tetapkan untuk masuk ke halaman akhir, lalu Tinjau + tetapkan lagi untuk menyelesaikan proses.

Penyiapan kode

Untuk mengikuti mulai cepat ini menggunakan autentikasi tanpa kata sandi dan akun Azure Anda sendiri:

  • Instal Azure CLI.
  • Masuk dengan akun Azure Anda di terminal atau prompt perintah dengan az login.
  • Gunakan akun yang sama saat Anda menambahkan peran yang sesuai ke sumber daya Anda nanti dalam tutorial.
  • Jalankan kode tutorial di terminal atau prompt perintah yang sama.

Penting

Pastikan Anda masuk dengan az login. Kelas DefaultAzureCredential dalam kode tanpa kata sandi menggunakan kredensial Azure CLI untuk mengautentikasi dengan ID Microsoft Entra.

Untuk menggunakan kode tanpa kata sandi, Anda harus menentukan:

  • namespace bus layanan yang sepenuhnya memenuhi syarat, misalnya: <service-bus-namespace.servicebus.windows.net>
  • nama topik
  • nama langganan

Menggunakan pip untuk menginstal paket

  1. Untuk menginstal paket Python yang diperlukan untuk tutorial Bus Layanan ini, buka prompt perintah yang memiliki Python di jalurnya. Ubah direktori ke folder tempat Anda ingin memiliki sampel.

  2. Instal paket:

    pip install azure-servicebus
    pip install azure-identity
    pip install aiohttp
    

Kirim pesan ke sebuah topik

Kode sampel berikut menunjukkan kepada Anda cara mengirim batch pesan ke topik Bus Layanan. Lihat komentar kode untuk mengetahui rinciannya.

Buka editor favorit Anda, seperti Visual Studio Code, buat file send.py, dan tambahkan kode berikut ke dalamnya.

  1. Tambahkan pernyataan import berikut.

    import asyncio
    from azure.servicebus.aio import ServiceBusClient
    from azure.servicebus import ServiceBusMessage
    from azure.identity.aio import DefaultAzureCredential
    
  2. Tambahkan konstanta dan tentukan kredensial.

    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    TOPIC_NAME = "TOPIC_NAME"
    
    credential = DefaultAzureCredential()
    

    Penting

    • Ganti FULLY_QUALIFIED_NAMESPACE dengan namespace layanan yang sepenuhnya memenuhi syarat untuk namespace Bus Layanan Anda.
    • Ganti TOPIC_NAME dengan nama topik.

    Dalam kode sebelumnya, Anda menggunakan kelas pustaka DefaultAzureCredential klien Azure Identity. Saat aplikasi berjalan secara lokal selama pengembangan, DefaultAzureCredential akan secara otomatis menemukan dan mengautentikasi ke Azure menggunakan akun yang Anda gunakan untuk masuk ke Azure CLI. Saat aplikasi disebarkan ke Azure, DefaultAzureCredential dapat mengautentikasi aplikasi Anda ke ID Microsoft Entra melalui identitas terkelola tanpa perubahan kode apa pun.

  3. Tambahkan metode untuk mengirim satu pesan.

    async def send_single_message(sender):
        # Create a Service Bus message
        message = ServiceBusMessage("Single Message")
        # send the message to the topic
        await sender.send_messages(message)
        print("Sent a single message")
    

    Pengirim adalah objek yang bertindak sebagai klien untuk topik yang Anda buat. Anda akan membuatnya nanti dan mengirim sebagai argumen ke fungsi ini.

  4. Tambahkan metode untuk mengirim daftar pesan.

    async def send_a_list_of_messages(sender):
        # Create a list of messages
        messages = [ServiceBusMessage("Message in list") for _ in range(5)]
        # send the list of messages to the topic
        await sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. Tambahkan metode untuk mengirim satu batch pesan.

    async def send_batch_message(sender):
        # Create a batch of messages
        async with sender:
            batch_message = await sender.create_message_batch()
            for _ in range(10):
                try:
                    # Add a message to the batch
                    batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch"))
                except ValueError:
                    # ServiceBusMessageBatch object reaches max_size.
                    # New ServiceBusMessageBatch object can be created here to send more data.
                    break
            # Send the batch of messages to the topic
            await sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Buat klien Bus Layanan lalu objek pengirim topik untuk mengirim pesan.

    async def run():
        # create a Service Bus client using the credential.
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
            # Get a Topic Sender object to send messages to the topic
            sender = servicebus_client.get_topic_sender(topic_name=TOPIC_NAME)
            async with sender:
                # Send one message
                await send_single_message(sender)
                # Send a list of messages
                await send_a_list_of_messages(sender)
                # Send a batch of messages
                await send_batch_message(sender)
            # Close credential when no longer needed.
            await credential.close()
    
    asyncio.run(run())
    print("Done sending messages")
    print("-----------------------")
    

Menerima pesan dari langganan

Kode sampel berikut menunjukkan kepada Anda cara menerima pesan dari langganan. Kode ini terus-menerus menerima pesan baru sampai tidak menerima pesan baru selama 5 (max_wait_time) detik.

Buka editor favorit Anda, seperti Visual Studio Code, buat file recv.py, dan tambahkan kode berikut ke dalamnya.

  1. Mirip dengan sampel kirim, tambahkan import pernyataan, tentukan konstanta yang harus Anda ganti dengan nilai Anda sendiri, dan tentukan kredensial.

    import asyncio
    from azure.servicebus.aio import ServiceBusClient
    from azure.identity.aio import DefaultAzureCredential
    
    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    SUBSCRIPTION_NAME = "SUBSCRIPTION_NAME"
    TOPIC_NAME = "TOPIC_NAME"
    
    credential = DefaultAzureCredential()
    
  2. Buat klien Bus Layanan lalu objek penerima langganan untuk menerima pesan.

    async def run():
        # create a Service Bus client using the credential
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
    
            async with servicebus_client:
                # get the Subscription Receiver object for the subscription
                receiver = servicebus_client.get_subscription_receiver(topic_name=TOPIC_NAME, 
                subscription_name=SUBSCRIPTION_NAME, max_wait_time=5)
                async with receiver:
                    received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20)
                    for msg in received_msgs:
                        print("Received: " + str(msg))
                        # complete the message so that the message is removed from the subscription
                        await receiver.complete_message(msg)
            # Close credential when no longer needed.
            await credential.close()
    
  3. Panggil run metode.

    asyncio.run(run())
    

Menjalankan aplikasi

Buka perintah yang memiliki Python di jalurnya, lalu jalankan kode untuk mengirim dan menerima pesan untuk langganan di bawah topik.

python send.py; python recv.py

Anda akan menemukan output berikut:

Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch

Di portal Microsoft Azure, buka namespace Service Bus Anda. Di halamanGambaran Umum, pastikan pesan yang masuk dan keluar berjumlah 16. Jika Anda tidak melihat hitungan, refresh halaman setelah menunggu beberapa menit.

Jumlah pesan masuk dan keluar

Pilih topik di panel bawah untuk melihat halaman Topik Bus Layanan untuk topik Anda. Di halaman ini, terdapat tiga pesan masuk dan tiga pesan keluar di grafik Pesan.

Pesan masuk dan keluar

Di halaman ini, jika Anda memilih langganan, Anda masuk ke halaman Langganan Bus Layanan. Anda dapat mengetahui jumlah pesan aktif, jumlah pesan surat tidak terkirim, dan jenis pesan lainnya di halaman ini. Pada contoh ini, semua pesan telah diterima, sehingga jumlah pesan aktif adalah nol.

Jumlah pesan aktif

Jika Anda mengomentari kode terima, jumlah pesan aktif terhitung sebanyak 16.

Jumlah pesan aktif: tidak ada penerima

Langkah berikutnya

Lihat dokumentasi dan sampel berikut: