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 Microsoft Entra ID. Dengan autentikasi Microsoft Entra, Anda dapat mengelola Bus Layanan 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, jika Anda ingin memberikan string koneksi secara langsung. |
spring.jms.servicebus.topic-client-id |
ID klien JMS. Hanya berfungsi untuk topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.enabled |
Nilai yang menunjukkan apakah akan mengaktifkan konfigurasi otomatis Bus Layanan JMS. Nilai defaultnya adalah true. |
spring.jms.servicebus.idle-timeout |
Durasi batas waktu diam koneksi yang menunjukkan berapa lama klien mengharapkan Bus Layanan untuk menjaga koneksi tetap hidup ketika tidak ada pesan yang dikirimkan. Nilai defaultnya adalah 2m. |
spring.jms.servicebus.passwordless-enabled |
Menentukan apakah akan mengaktifkan autentikasi tanpa kata sandi untuk Azure Service Bus JMS. Nilai defaultnya adalah false. |
spring.jms.servicebus.pricing-tier |
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. |
spring.jms.servicebus.listener.reply-pub-sub-domain |
Nilai yang menunjukkan apakah jenis tujuan balasan adalah topik. Hanya berfungsi untuk bean 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 berfungsi untuk topicJmsListenerContainerFactory bean. Nilai defaultnya adalah true. |
spring.jms.servicebus.listener.subscription-shared |
Nilai yang menunjukkan apakah langganan akan dibagikan. Hanya berfungsi untuk bean topicJmsListenerContainerFactory. |
spring.jms.servicebus.pool.block-if-full |
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 |
Jangka waktu pemblokiran sebelum menghasilkan pengecualian jika pool masih penuh. |
spring.jms.servicebus.pool.enabled |
Nilai yang menunjukkan apakah JmsPoolConnectionFactory harus dibuat sebagai pengganti ConnectionFactory biasa. |
spring.jms.servicebus.pool.idle-timeout |
Batas waktu idle 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 jeda antara setiap eksekusi utas penggusuran koneksi idle. Jika nilainya negatif, thread pembersihan koneksi idle tidak akan 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 Bus Layanan ini. Nilai defaultnya adalah 0. |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch |
Jumlah pengambilan awal untuk topik persisten. Nilai defaultnya adalah 0. |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch |
Jumlah prefetch untuk peramban antrean. Nilai defaultnya adalah 0. |
spring.jms.servicebus.prefetch-policy.queue-prefetch |
Jumlah pramuat 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 demi singkatnya.
Untuk informasi selengkapnya, lihat dokumen Spring JMS.
Penggunaan dasar
Menghubungkan ke Azure Service Bus JMS 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 Microsoft Entra ID untuk mengotorisasi permintaan ke sumber daya Bus Layanan. Dengan Microsoft Entra ID, pastikan Anda telah memberikan peran Azure Service Bus Data Owner kepada akun Microsoft Entra yang sedang Anda gunakan. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Azure.
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 Autentikasi identitas terkelola dengan Microsoft Entra ID 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, Anda 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: Pabrik ini mempertahankan kumpulan koneksi dengan opsi yang dapat disesuaikan sepertispring.jms.servicebus.pool.max-connections. Pengaturan konfigurasi kumpulan lainnya - diawali denganspring.jms.servicebus.pool.- dirinci di bagian Konfigurasi . Penyiapan ini meningkatkan performa dengan menggunakan kemampuan penyeimbangan beban Azure Service Bus, mendistribusikan lalu lintas di beberapa titik akhir.CachingConnectionFactory: Factory ini menggunakan kembali satu koneksi untuk semua panggilan keJmsTemplate, sehingga mengurangi beban pembuatan koneksi, yang cocok untuk skenario dengan lalu lintas rendah. Namun, mode ini tidak menggunakan kemampuan penyeimbangan beban Azure Service Bus.ServiceBusJmsConnectionFactory: Dalam mode ini, setiap panggilan untukJmsTemplatemembuat koneksi baru, yang dapat menjadi intensif sumber daya dan kurang efisien.
Ketika ketiga kelas ada di classpath, mana yang digunakan? Tabel berikut menjelaskan mana yang digunakan berdasarkan properti konfigurasi (sejak Spring Cloud Azure 7.1.0 dan 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Pengirim ConnectionFactory |
Kontainer Pendengar ConnectionFactory |
|---|---|---|---|
| belum diatur | belum diatur | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| belum diatur | true |
CachingConnectionFactory |
CachingConnectionFactory |
| belum diatur | false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
true |
belum diatur | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
true |
true |
CachingConnectionFactory |
CachingConnectionFactory |
true |
false |
JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
false |
belum diatur | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
false |
true |
CachingConnectionFactory |
CachingConnectionFactory |
false |
false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
Nota
Tabel berikut menunjukkan nilai default ConnectionFactory saat spring.jms.servicebus.pool.enabled dan spring.jms.cache.enabled belum ditetapkan untuk versi Spring Cloud Azure yang berbeda:
| Versi Spring Cloud Azure | Pengirim ConnectionFactory |
Wadah pendengar ConnectionFactory |
|---|---|---|
| >= 6.2.0 atau >= 7.1.0 | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| 6.1.0 dan 7.0.0 | ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
| <= 6.1.0 | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
Contoh
Untuk informasi selengkapnya, lihat repositori azure-spring-boot-samples di GitHub.