Bagikan melalui


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

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 JavaScript untuk menggunakan paket @azure/service-bus untuk:
    • Kirim sekumpulan pesan ke topik tersebut.
    • Terima pesan tersebut dari langganan.

Catatan

Mulai cepat ini memberikan petunjuk langkah demi langkah untuk skenario sederhana dalam mengirim kumpulan pesan ke topik Bus Layanan dan menerima pesan tersebut dari langganan topik. Anda dapat menemukan contoh JavaScript dan TypeScript bawaan untuk Azure Service Bus di Azure SDK untuk repositori JavaScript di GitHub.

Prasyarat

Untuk menggunakan mulai cepat ini dengan akun Azure Anda sendiri, Anda memerlukan:

  • 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 yang sesuai ke sumber daya Anda.
  • Jalankan kode di terminal atau prompt perintah yang sama.
  • Catat nama topik dan langganan Anda untuk namespace Bus Layanan Anda. Anda akan membutuhkannya dalam kode.

Catatan

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:

  1. Masuk ke portal Azure.

  2. Navigasi ke halaman Semua layanan.

  3. Di bilah navigasi kiri, pilih Integrasi dari daftar kategori, arahkan mouse ke atas Bus Layanan, lalu pilih + tombol pada petak peta Bus Layanan.

    Image showing selection of Create a resource, Integration, and then Service Bus in the menu.

  4. Di tag Dasar-Dasar pada halaman Buat kumpulan nama, 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 tempat namespace layanan akan aktif, atau buat grup baru.

    3. 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“.
    4. Untuk Lokasi, pilih wilayah tempat namespace layanan Anda akan dihosting.

    5. 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.

    6. Pilih Tinjau + buat di bagian bawah halaman.

      Image showing the Create a namespace page

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

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

    Image showing the deployment succeeded page with the Go to resource link.

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

    Image showing the home page of the Service Bus namespace created.

Membuat topik menggunakan portal Microsoft Azure

  1. Di halaman Namespace Bus Layanan, 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.

    Image showing the Create topic page.

Membuat langganan untuk topik tersebut

  1. Pilih topik yang Anda buat di sesi sebelumnya.

    Image showing the selection of topic from the list of topics.

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

    Image showing the Add subscription button.

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

    1. Masukkan S1 untuk nama langganan.

    2. Masukkan 3 untuk jumlah pengiriman Maks.

    3. Lalu, pilih Buat untuk membuat langganan.

      Image showing the Create subscription page.

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.

  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 dari menu drop-down yang dihasilkan.

    A screenshot showing how to assign a role.

  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.

Gunakan NPM untuk menginstal paketnya

  1. Untuk menginstal paket npm yang diperlukan untuk Bus Layanan, buka prompt perintah yang ada npm di jalurnya, ubah direktori ke folder tempat Anda ingin memiliki sampel, lalu jalankan perintah ini.

  2. Instal paket berikut:

    npm install @azure/service-bus @azure/identity
    

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.

Anda harus masuk dengan Azure CLI az login agar komputer lokal Anda menyediakan autentikasi tanpa kata sandi yang diperlukan dalam kode ini.

  1. Buka editor favorit Anda, seperti Visual Studio Code

  2. Buat file yang dengan nama sendtotopic.js dan tempelkan kode di bawah ini ke dalamnya. Kode ini akan mengirim pesan ke topik Anda.

    Penting

    Kredensial tanpa kata sandi disediakan dengan DefaultAzureCredential.

    const { ServiceBusClient } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    const topicName = "<TOPIC NAME>";
    
    const messages = [
        { body: "Albert Einstein" },
        { body: "Werner Heisenberg" },
        { body: "Marie Curie" },
        { body: "Steven Hawking" },
        { body: "Isaac Newton" },
        { body: "Niels Bohr" },
        { body: "Michael Faraday" },
        { body: "Galileo Galilei" },
        { body: "Johannes Kepler" },
        { body: "Nikolaus Kopernikus" }
     ];
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createSender() can also be used to create a sender for a queue.
        const sender = sbClient.createSender(topicName);
    
        try {
            // Tries to send all messages in a single batch.
            // Will fail if the messages cannot fit in a batch.
            // await sender.sendMessages(messages);
    
            // create a batch object
            let batch = await sender.createMessageBatch();
            for (let i = 0; i < messages.length; i++) {
                // for each message in the array
    
                // try to add the message to the batch
                if (!batch.tryAddMessage(messages[i])) {
                    // if it fails to add the message to the current batch
                    // send the current batch as it is full
                    await sender.sendMessages(batch);
    
                    // then, create a new batch
                    batch = await sender.createMessageBatch();
    
                    // now, add the message failed to be added to the previous batch to this batch
                    if (!batch.tryAddMessage(messages[i])) {
                        // if it still can't be added to the batch, the message is probably too big to fit in a batch
                        throw new Error("Message too big to fit in a batch");
                    }
                }
            }
    
            // Send the last created batch of messages to the topic
            await sender.sendMessages(batch);
    
            console.log(`Sent a batch of messages to the topic: ${topicName}`);
    
            // Close the sender
            await sender.close();
        } finally {
            await sbClient.close();
        }
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Ganti <SERVICE BUS NAMESPACE CONNECTION STRING> dengan string koneksi ke namespace Service Bus Anda.

  4. Ganti <TOPIC NAME> dengan nama topik.

  5. Kemudian, jalankan perintah tersebut untuk mengeksekusi file ini.

    node sendtotopic.js
    
  6. Anda akan menemukan keluaran berikut.

    Sent a batch of messages to the topic: mytopic
    

Menerima pesan dari langganan

Anda harus masuk dengan Azure CLI az login agar komputer lokal Anda menyediakan autentikasi tanpa kata sandi yang diperlukan dalam kode ini.

  1. Buka editor favorit Anda, seperti Visual Studio Code

  2. Buat file dengan nama receivefromsubscription.js dan tempelkan kode berikut ke dalamnya. Lihat komentar kode untuk mengetahui rinciannya.

    const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    const topicName = "<TOPIC NAME>";
    const subscriptionName = "<SUBSCRIPTION NAME>";
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createReceiver() can also be used to create a receiver for a queue.
        const receiver = sbClient.createReceiver(topicName, subscriptionName);
    
        // function to handle messages
        const myMessageHandler = async (messageReceived) => {
            console.log(`Received message: ${messageReceived.body}`);
        };
    
        // function to handle any errors
        const myErrorHandler = async (error) => {
            console.log(error);
        };
    
        // subscribe and specify the message and error handlers
        receiver.subscribe({
            processMessage: myMessageHandler,
            processError: myErrorHandler
        });
    
        // Waiting long enough before closing the sender to send messages
        await delay(5000);
    
        await receiver.close();
        await sbClient.close();
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Ganti <SERVICE BUS NAMESPACE CONNECTION STRING> dengan string koneksi ke namespace.

  4. Ganti <TOPIC NAME> dengan nama topik.

  5. Ganti <SUBSCRIPTION NAME> dengan nama langganan ke topik tersebut.

  6. Kemudian, jalankan perintah tersebut untuk mengeksekusi file ini.

    node receivefromsubscription.js
    

Anda akan menemukan keluaran berikut.

Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus

Di portal Azure, navigasikan ke namespace Bus Layanan Anda, alihkan ke Topiks di panel bawah, dan pilih topik Anda untuk melihat laman Topik Bus Layanan untuk topik Anda. Pada laman ini, Anda akan melihat 10 pesan masuk dan 10 pesan keluar di bagan Pesan.

Incoming and outgoing messages

Jika Anda hanya menjalankan aplikasi kirim lain kali, pada laman Topik Bus Layanan, Anda akan melihat 20 pesan masuk (10 baru) tetapi 10 pesan keluar.

Updated topic page

Di laman ini, jika Anda memilih langganan di panel bawah, Anda akan membuka laman Langganan Bus Layanan. Anda dapat mengetahui jumlah pesan aktif, jumlah pesan surat tidak terkirim, dan jenis pesan lainnya di halaman ini. Dalam contoh ini, ada 10 pesan aktif yang belum diterima oleh penerima.

Active message count

Pemecahan Masalah

Jika Anda menerima kesalahan saat menjalankan versi kode JavaScript tanpa kata sandi tentang klaim yang diperlukan, pastikan Anda masuk melalui perintah Azure CLI, az login dan peran yang sesuai diterapkan ke akun pengguna Azure Anda.

Membersihkan sumber daya

Navigasi ke namespace Bus Layanan Anda di portal Azure, dan pilih Hapus pada portal Azure untuk menghapus namespace dan antrean di dalamnya.

Langkah berikutnya

Lihat dokumentasi dan sampel berikut: