Mengirim dan menerima pesan dari antrean Azure Bus Layanan (Python)
Dalam tutorial ini, Anda menyelesaikan langkah-langkah berikut:
- Membuat namespace Azure Service Bus menggunakan portal Microsoft Azure.
- Gunakan portal Microsoft Azure untuk membuat antrean Azure Service Bus.
- Tulis kode Python untuk menggunakan paket azure-servicebus untuk:
- Kirim sekumpulan pesan ke antrean.
- Terima pesan tersebut dari antrean.
Catatan
Mulai cepat ini memberikan instruksi langkah demi langkah untuk skenario sederhana mengirim pesan ke antrean Azure Service Bus dan menerima pesan. Anda dapat menemukan contoh JavaScript dan TypeScript bawaan untuk Azure Service Bus di Azure SDK untuk repositori Python di GitHub.
Prasyarat
Jika Anda baru menggunakan layanan ini, lihat Gambaran umum Azure Service Bus sebelum melakukan mulai cepat ini.
Langganan Azure. Untuk menyelesaikan tutorial ini, Anda memerlukan akun Azure. Anda dapat mengaktifkan keuntungan pelanggan MSDN Anda atau mendaftar akun gratis.
Python 3.8 atau lebih tinggi.
Untuk menggunakan mulai cepat ini dengan akun Azure Anda sendiri:
- Instal Azure CLI, yang menyediakan autentikasi tanpa kata sandi ke komputer pengembang Anda.
- Masuk dengan akun Azure Anda di terminal atau prompt perintah dengan
az login
. - Gunakan akun yang sama saat Anda menambahkan peran data yang sesuai ke sumber daya Anda.
- Jalankan kode di terminal atau prompt perintah yang sama.
- Perhatikan nama antrean untuk namespace Bus Layanan Anda. Anda akan membutuhkannya dalam kode.
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 mulai menggunakan entitas Olahpesan Azure Service Bus di Azure, Anda harus terlebih dahulu membuat namespace layanan dengan nama yang unik di Azure. Namespace menyediakan kontainer cakupan untuk sumber daya Bus Layanan (antrean, topik, dll.) dalam aplikasi Anda.
Untuk membuat namespace layanan:
Masuk ke portal Azure.
Navigasi ke halaman Semua layanan.
Di bilah navigasi kiri, pilih Integrasi dari daftar kategori, arahkan mouse ke atas Bus Layanan, lalu pilih + tombol pada petak peta Bus Layanan.
Di tag Dasar-Dasar pada halaman Buat kumpulan nama, ikuti langkah-langkah berikut:
Untuk Langganan, pilih langganan Azure untuk membuat namespace layanan.
Untuk Grup sumber daya, pilih grup sumber daya yang sudah ada tempat namespace layanan akan aktif, atau buat grup baru.
Masukkan nama untuk kumpulan nama. Nama namespace harus mematuhi 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 diakhiri dengan “-sb“ atau “-mgmt“.
Untuk Lokasi, pilih wilayah tempat namespace layanan Anda akan dihosting.
Untuk Tingkat harga, pilih tingkat harga (Dasar, Standar, atau Premium) untuk kumpulan namanya. Untuk mulai cepat ini, pilih Standar.
Penting
Jika Anda ingin menggunakan topik dan langganan, pilih Standar atau Premium. Topik/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 mengetahui informasi selengkapnya, lihat Olahpesan Premium Azure Service Bus.
Pilih Tinjau + buat di bagian bawah halaman.
Pada halaman Tinjau + buat, tinjau pengaturan, dan pilih Buat.
Setelah penyebaran sumber daya berhasil, pilih Buka sumber daya di halaman penyebaran.
Anda melihat beranda untuk namespace layanan bus layanan Anda.
Buat antrean di portal Microsoft Azure
Pada halaman Namespace layanan Microsoft Azure Service Bus, pilih Antrean di menu navigasi kiri.
Pada halaman Antrean, pilih + Antrean pada toolbar.
Masukkan nama untuk antrean, dan tinggalkan nilai lainnya dengan defaultnya.
Sekarang, pilih Buat.
Mengautentikasi aplikasi ke Azure
Mulai cepat ini menunjukkan kepada Anda dua cara menyambungkan ke Azure Bus Layanan: 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 atau dalam file konfigurasi atau dalam 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. Anda juga dapat membaca selengkapnya tentang autentikasi tanpa kata sandi di halaman gambaran umum.
Menetapkan peran ke pengguna Microsoft Entra Anda
Saat mengembangkan secara lokal, pastikan bahwa akun pengguna yang tersambung ke Azure Bus Layanan memiliki izin yang benar. Anda memerlukan peran Pemilik Data azure Bus Layanan 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. Pelajari selengkapnya tentang cakupan yang tersedia untuk penetapan peran di halaman gambaran umum cakupan .
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 di bawah ini untuk mengotorisasi akses ke namespace Microsoft Azure Service Bus:
- Pemilik Data Azure Bus Layanan: Memungkinkan akses data ke namespace Bus Layanan dan entitasnya (antrean, topik, langganan, dan filter). Anggota peran ini dapat mengirim dan menerima pesan dari antrean atau topik/langganan.
- Pengirim Data Azure Bus Layanan: Gunakan peran ini untuk memberikan akses pengiriman ke namespace Bus Layanan dan entitasnya.
- Azure Bus Layanan Data Receiver: Gunakan peran ini untuk memberikan akses terima ke namespace Bus Layanan 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. Ini akan memungkinkan aplikasi yang berjalan dalam konteks akun pengguna Anda untuk mengirim pesan ke antrean atau topik, dan menerima pesan dari antrean atau langganan topik.
Penting
Dalam kebanyakan kasus, akan memakan waktu 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.
Jika Anda tidak membuka halaman Bus Layanan Namespace layanan di portal Azure, temukan namespace Bus Layanan Anda menggunakan bilah pencarian utama atau navigasi kiri.
Pada halaman gambaran umum, pilih Kontrol akses (IAM) dari menu sebelah kiri.
Di halaman Kontrol akses (IAM), pilih tab Penetapan peran.
Pilih + Tambahkan dari menu atas lalu Tambahkan penetapan peran dari menu drop-down yang dihasilkan.
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.Di bagian Tetapkan akses ke, pilih Pengguna, grup, atau perwakilan layanan, lalu pilih + Pilih anggota.
Dalam dialog, cari nama pengguna Microsoft Entra Anda (biasanya alamat email user@domain Anda) lalu pilih Pilih di bagian bawah dialog.
Pilih Tinjau + tetapkan untuk masuk ke halaman akhir, lalu Tinjau + tetapkan lagi untuk menyelesaikan proses.
Menggunakan pip untuk menginstal paket
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 Anda.
Instal paket berikut:
pip install azure-servicebus pip install azure-identity pip install aiohttp
Mengirim pesan ke antrean
Kode sampel berikut ini menunjukkan cara mengirim pesan ke antrean. Buka editor favorit Anda, seperti Visual Studio Code, buat file send.py, dan tambahkan kode berikut ke dalamnya.
Tambahkan pernyataan impor.
import asyncio from azure.servicebus.aio import ServiceBusClient from azure.servicebus import ServiceBusMessage from azure.identity.aio import DefaultAzureCredential
Tambahkan konstanta dan tentukan kredensial.
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()
Penting
- Ganti
FULLY_QUALIFIED_NAMESPACE
dengan namespace layanan yang sepenuhnya memenuhi syarat untuk namespace Bus Layanan Anda. - Ganti
QUEUE_NAME
dengan nama antrean.
- Ganti
Tambahkan metode untuk mengirim satu pesan.
async def send_single_message(sender): # Create a Service Bus message and send it to the queue message = ServiceBusMessage("Single Message") await sender.send_messages(message) print("Sent a single message")
Pengirim adalah objek yang bertindak sebagai klien untuk antrean yang Anda buat. Anda akan membuatnya nanti dan mengirim sebagai argumen ke fungsi ini.
Tambahkan metode untuk mengirim daftar pesan.
async def send_a_list_of_messages(sender): # Create a list of messages and send it to the queue messages = [ServiceBusMessage("Message in list") for _ in range(5)] await sender.send_messages(messages) print("Sent a list of 5 messages")
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 queue await sender.send_messages(batch_message) print("Sent a batch of 10 messages")
Buat klien Bus Layanan lalu objek pengirim antrean 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 Queue Sender object to send messages to the queue sender = servicebus_client.get_queue_sender(queue_name=QUEUE_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()
run
Panggil metode dan cetak pesan.asyncio.run(run()) print("Done sending messages") print("-----------------------")
Terima pesan dari antrean
Contoh kode berikut menunjukkan kepada Anda cara menerima pesan dari antrean. Kode yang ditampilkan menerima pesan baru hingga 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.
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" QUEUE_NAME = "QUEUE_NAME" credential = DefaultAzureCredential()
Buat klien Bus Layanan lalu objek penerima antrean untuk menerima pesan.
async def run(): # create a Service Bus client using the connection string async with ServiceBusClient( fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE, credential=credential, logging_enable=True) as servicebus_client: async with servicebus_client: # get the Queue Receiver object for the queue receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME) 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 queue await receiver.complete_message(msg) # Close credential when no longer needed. await credential.close()
Panggil
run
metode.asyncio.run(run())
Menjalankan aplikasi
Buka prompt perintah yang memiliki Python di jalurnya, lalu jalankan kode untuk mengirim dan menerima pesan dari antrean.
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.
Pilih antrean di halaman Gambaran umum ini untuk membuka halaman Antrean Bus Layanan. Anda juga akan menemukan jumlah pesan masuk dan keluar di halaman ini. Anda juga akan melihat informasi lain seperti ukuran antrean saat ini dan jumlah pesan aktif.
Langkah berikutnya
Lihat dokumentasi dan sampel berikut:
- Pustaka klien Azure Bus Layanan untuk Python
- Sampel.
- Folder sync_samples memiliki sampel yang menampilkan cara berinteraksi secara serentak dengan Bus Layanan.
- Folder sync_samples memiliki sampel yang menampilkan cara berinteraksi secara asinkron dengan Bus Layanan. Di mulai cepat ini, Anda menggunakan metode ini.
- dokumentasi referensi azure-servicebus