Bagikan melalui


Menggunakan Azure Service Bus dengan JMS

Artikel ini menjelaskan cara menggunakan Azure Service Bus dengan JMS API yang terintegrasi ke dalam kerangka kerja Spring JMS.

Fitur inti

Koneksi tanpa kata sandi

Koneksi tanpa kata sandi menggunakan autentikasi Microsoft Entra untuk menyambungkan ke layanan Azure tanpa menyimpan kredensial apa pun dalam aplikasi, file konfigurasinya, atau dalam variabel lingkungan. Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Service Bus menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola Service Bus dan layanan Microsoft lainnya di lokasi pusat, yang menyederhanakan manajemen izin.

Cara kerjanya

Spring Cloud Azure pertama-tama membangun salah satu jenis kredensial berikut tergantung pada konfigurasi autentikasi aplikasi:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Jika tidak ada jenis kredensial ini yang ditemukan, rantai kredensial melalui DefaultTokenCredential digunakan untuk mendapatkan kredensial dari properti aplikasi, variabel lingkungan, identitas terkelola, atau IDEs. Untuk informasi selengkapnya, lihat autentikasi Spring Cloud Azure.

Penyiapan dependensi

Tambahkan dependensi berikut jika Anda ingin memigrasikan aplikasi Spring JMS Anda untuk menggunakan Azure Service Bus.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>

Konfigurasi

Tabel berikut menjelaskan properti yang dapat dikonfigurasi saat menggunakan dukungan Spring JMS:

Harta benda Deskripsi
spring.jms.servicebus.connection-string String koneksi Azure Service Bus, saat Anda ingin menyediakan string koneksi secara langsung.
spring.jms.servicebus.topic-client-id ID klien JMS. Hanya bekerja untuk kacang topicJmsListenerContainerFactory.
spring.jms.servicebus.enabled Nilai yang menunjukkan apakah akan mengaktifkan konfigurasi otomatis Azure Service Bus JMS. Nilai defaultnya adalah true.
musim semi.jms.servicebus.idle-timeout Durasi batas waktu diam koneksi yang menunjukkan berapa lama klien mengharapkan Service Bus untuk menjaga koneksi tetap hidup ketika tidak ada pesan yang dikirimkan. Nilai defaultnya adalah 2m.
spring.jms.servicebus.passwordless-enabled Apakah akan mengaktifkan tanpa kata sandi untuk Azure Service Bus JMS. Nilai defaultnya adalah false.
spring.jms.servicebus.tingkat harga Tingkat Harga Azure Service Bus. Nilai yang didukung premium dan standard. Tingkat premium menggunakan Java Message Service (JMS) 2.0, sementara tingkat standar menggunakan JMS 1.1 untuk berinteraksi dengan Azure Service Bus.
musim semi.jms.servicebus.listener.reply-pub-sub-domain Nilai yang menunjukkan apakah jenis tujuan balasan adalah topik. Hanya bekerja untuk kacang topicJmsListenerContainerFactory.
spring.jms.servicebus.listener.phase Fase di mana kontainer ini harus dimulai dan dihentikan.
spring.jms.servicebus.listener.reply-qos-settings Mengonfigurasi QosSettings yang akan digunakan saat mengirim balasan.
spring.jms.servicebus.listener.subscription-durable Nilai yang menunjukkan apakah akan membuat langganan tahan lama. Hanya bekerja untuk kacang topicJmsListenerContainerFactory. Nilai defaultnya adalah true.
spring.jms.servicebus.listener.subscription-shared Nilai yang menunjukkan apakah akan membuat langganan dibagikan. Hanya bekerja untuk kacang topicJmsListenerContainerFactory.
musim semi.jms.servicebus.pool.blok-jika-penuh Nilai yang menunjukkan apakah akan memblokir saat koneksi diminta dan kumpulan penuh. Atur ke false untuk melemparkan JMSException sebagai gantinya.
spring.jms.servicebus.pool.block-if-full-timeout Periode pemblokiran sebelum melempar pengecualian jika kumpulan masih penuh.
spring.jms.servicebus.pool.enabled Nilai yang menunjukkan apakah JmsPoolConnectionFactory harus dibuat, alih-alih ConnectionFactoryreguler .
musim semi.jms.servicebus.pool.idle-timeout Batas waktu diam kumpulan koneksi.
spring.jms.servicebus.pool.max-connections Jumlah maksimum koneksi terkumpul.
spring.jms.servicebus.pool.max-sessions-per-connection Jumlah maksimum sesi yang dikumpulkan per koneksi di kumpulan.
spring.jms.servicebus.pool.time-between-expiration-check Waktu untuk tidur antara eksekusi utas pengeluaran koneksi diam. Ketika negatif, tidak ada utas pengeluaran koneksi menganggur yang berjalan.
spring.jms.servicebus.pool.use-anonymous-producers Nilai yang menunjukkan apakah hanya menggunakan satu instans MessageProducer anonim. Atur ke false untuk membuat satu MessageProducer setiap kali diperlukan.
spring.jms.servicebus.prefetch-policy.all Nilai fallback untuk opsi prefetch di namespace Service Bus ini. Nilai defaultnya adalah 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Jumlah prefetch untuk topik tahan lama. Nilai defaultnya adalah 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Jumlah prefetch untuk browser antrean. Nilai defaultnya adalah 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Jumlah prefetch untuk antrean. Nilai defaultnya adalah 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Jumlah prefetch untuk topik. Nilai defaultnya adalah 0.

Nota

Konfigurasi umum Spring JMS dihilangkan untuk singkatnya.

Untuk informasi selengkapnya, lihat dokumen Spring JMS.

Penggunaan dasar

Menyambungkan ke Azure Service Bus JMS menggunakan tanpa kata sandi

Konfigurasikan properti berikut dalam file application.yml Anda:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Penting

Azure Service Bus JMS mendukung penggunaan ID Microsoft Entra untuk mengotorisasi permintaan ke sumber daya Azure Service Bus. Dengan MICROSOFT Entra ID, pastikan Anda telah menetapkan peran Pemilik Data Azure Service Bus ke akun Microsoft Entra yang saat ini Anda gunakan. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure.

Menyambungkan ke Azure Service Bus dengan JMS menggunakan Identitas Terkelola

  1. Untuk menggunakan identitas terkelola, aktifkan identitas terkelola untuk layanan Anda dan tetapkan peran Azure Service Bus Data Owner. Untuk informasi selengkapnya, lihat Mengautentikasi identitas terkelola dengan ID Microsoft Entra untuk mengakses sumber daya Azure Service Bus.

  2. Konfigurasikan properti berikut dalam file application.yml Anda:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
      jms:
        servicebus:
          namespace: ${AZURE_SERVICEBUS_NAMESPACE}
          pricing-tier: ${PRICING_TIER}
          passwordless-enabled: true
    

    Penting

    Jika Anda menggunakan identitas terkelola yang ditetapkan pengguna, juga perlu menambahkan properti spring.cloud.azure.credential.client-id dengan ID klien identitas terkelola yang ditetapkan pengguna Anda.

Menyambungkan ke Azure Service Bus JMS menggunakan string koneksi

Tambahkan properti berikut dan Anda siap melakukannya.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Nota

Microsoft merekomendasikan penggunaan alur autentikasi paling aman yang tersedia. Alur autentikasi yang dijelaskan dalam prosedur ini, seperti untuk database, cache, olahpesan, atau layanan AI, memerlukan tingkat kepercayaan yang sangat tinggi dalam aplikasi dan membawa risiko yang tidak ada dalam alur lain. Gunakan alur ini hanya ketika opsi yang lebih aman, seperti identitas terkelola untuk koneksi tanpa kata sandi atau tanpa kunci, tidak layak. Untuk operasi komputer lokal, lebih suka identitas pengguna untuk koneksi tanpa kata sandi atau tanpa kunci.

Koneksi

Spring Cloud Azure menyediakan tiga opsi Connection Factory berikut untuk menyambungkan ke Azure Service Bus JMS:

  • JmsPoolConnectionFactory: Atur spring.jms.servicebus.pool.enabled=true atau biarkan pengaturan kumpulan dan cache tidak diatur untuk menggunakan nilai default. Pabrik ini mempertahankan kumpulan koneksi dengan opsi yang dapat disesuaikan seperti spring.jms.servicebus.pool.max-connections. Pengaturan konfigurasi kumpulan tambahan - diawali dengan - dirinci di bagian Konfigurasi . Penyiapan ini meningkatkan performa dengan memanfaatkan kemampuan penyeimbangan beban Azure Service Bus, mendistribusikan lalu lintas di beberapa titik akhir.

  • CachingConnectionFactory: Atur spring.jms.cache.enabled=true dan biarkan spring.jms.servicebus.pool.enabled tidak diatur. Pabrik ini menggunakan kembali satu koneksi untuk semua panggilan ke JmsTemplate, mengurangi overhead pembuatan koneksi, yang ideal untuk skenario lalu lintas rendah. Namun, mode ini tidak memanfaatkan kemampuan penyeimbangan beban Azure Service Bus.

  • ServiceBusJmsConnectionFactory: Atur spring.jms.servicebus.pool.enabled=false dan spring.jms.cache.enabled=false untuk menggunakan ServiceBusJmsConnectionFactory secara langsung, tanpa kumpulan atau penembolokan. Dalam mode ini, setiap panggilan ke JmsTemplate membuat koneksi baru, yang dapat menjadi intensif sumber daya dan kurang efisien.

Untuk performa optimal dan distribusi beban, sebaiknya gunakan JmsPoolConnectionFactory dengan mengatur spring.jms.servicebus.pool.enabled=true. Hindari membungkus JmsPoolConnectionFactory dengan CachingConnectionFactory atau ServiceBusJmsConnectionFactory karena ini dapat meniadakan manfaat pengumpulan dan dapat mengakibatkan pegangan koneksi tidak aktif setelah dikeluarkan dari kumpulan.

Nota

Dimulai dengan Spring Cloud Azure 5.18.0, ConnectionFactory default telah diperbarui ke JmsPoolConnectionFactory untuk menggunakan penyeimbangan beban server Azure Service Bus dengan lebih baik. Jika Anda lebih suka terus menggunakan CachingConnectionFactory untuk penembolokan Session dan MessageProducer, atur spring.jms.cache.enabled ke true.

Sampel

Untuk informasi selengkapnya, lihat repositori azure-spring-boot-samples di GitHub.