Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredential
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
Menyambungkan ke Azure Service Bus dengan JMS menggunakan Identitas Terkelola
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.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: truePenting
Jika Anda menggunakan identitas terkelola yang ditetapkan pengguna, juga perlu menambahkan properti
spring.cloud.azure.credential.client-iddengan 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: Aturspring.jms.servicebus.pool.enabled=trueatau biarkan pengaturan kumpulan dan cache tidak diatur untuk menggunakan nilai default. Pabrik ini mempertahankan kumpulan koneksi dengan opsi yang dapat disesuaikan sepertispring.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: Aturspring.jms.cache.enabled=truedan biarkanspring.jms.servicebus.pool.enabledtidak diatur. Pabrik ini menggunakan kembali satu koneksi untuk semua panggilan keJmsTemplate, mengurangi overhead pembuatan koneksi, yang ideal untuk skenario lalu lintas rendah. Namun, mode ini tidak memanfaatkan kemampuan penyeimbangan beban Azure Service Bus.ServiceBusJmsConnectionFactory: Aturspring.jms.servicebus.pool.enabled=falsedanspring.jms.cache.enabled=falseuntuk menggunakanServiceBusJmsConnectionFactorysecara langsung, tanpa kumpulan atau penembolokan. Dalam mode ini, setiap panggilan keJmsTemplatemembuat 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.