Migrasi aplikasi Java Message Service (JMS) 2.0 yang ada dari Apache ActiveMQ ke Azure Service Bus
Artikel ini membahas cara memodifikasi aplikasi Java Message Service (JMS) 2.0 yang sudah ada yang berinteraksi dengan JMS Broker untuk berinteraksi dengan Azure Service Bus sebagai gantinya. Secara khusus, artikel ini membahas migrasi dari Apache ActiveMQ atau Amazon MQ.
Azure Service Bus mendukung beban kerja Java 2 Platform, Enterprise Edition, dan Spring yang menggunakan JMS 2.0 API melalui Advanced Message Queueing Protocol (AMQP).
Sebelum memulai
Perbedaan antara Azure Service Bus dan Apache ActiveMQ
Azure Service Bus dan Apache ActiveMQ keduanya adalah perantara pesan, berfungsi sebagai penyedia layanan JMS untuk aplikasi klien untuk mengirim pesan ke dan menerima pesan dari. Keduanya memungkinkan semantik point-to-point dengan antrian, dan semantik publish-subscribe dengan topik dan langganan.
Meski begitu, ada beberapa perbedaan di antara keduanya, seperti yang ditunjukkan tabel berikut ini:
Kategori | ActiveMQ | Azure Service Bus |
---|---|---|
Tingkat aplikasi | Monolit terkluster | Dua tingkat (gateway + back end) |
Dukungan protokol |
|
AMQP |
Mode provisi |
|
Platform as a service (PaaS) terkelola |
Ukuran pesan | Pelanggan dapat dikonfigurasi | 100 MB (Tingkat premium) |
Ketersediaan tinggi | Dikelola pelanggan | Dikelola platform |
Pemulihan dari bencana | Dikelola pelanggan | Dikelola platform |
Fitur yang didukung dan tidak didukung saat ini
Tabel berikut mencantumkan fitur Java Message Service (JMS) yang saat ini didukung oleh Azure Service Bus. Ini juga menunjukkan fitur yang tidak didukung.
Fitur | API | Keadaan |
---|---|---|
Antrean |
|
Didukung |
Topik |
|
Didukung |
Antrean sementara |
|
Didukung |
Topik sementara |
|
Didukung |
Produser Pesan / JMSProducer |
|
Didukung |
Antrean browser |
|
Didukung |
Konsumen Pesan/ JMSConsumer |
noLocal saat ini tidak didukung |
Didukung |
Langganan bersama yang tahan lama |
|
Didukung |
Langganan privat yang tahan lama |
noLocal saat ini tidak didukung dan harus diatur ke false |
Didukung |
Langganan bersama yang tidak tahan lama |
|
Didukung |
Langganan privat yang tidak tahan lama |
noLocal saat ini tidak didukung dan harus diatur ke false |
Didukung |
Pemilih pesan | tergantung pada konsumen yang dibuat | Didukung |
Penundaan Pengiriman (pesan terjadwal) |
|
Didukung |
Pesan dibuat |
|
Didukung |
Transaksi lintas entitas |
|
Didukung |
Transaksi terdistribusi | Tidak didukung |
Pertimbangan
Sifat dua tingkat Azure Service Bus memberikan berbagai kemampuan kelangsungan bisnis (ketersediaan tinggi dan pemulihan bencana). Namun, ada beberapa pertimbangan saat Anda menggunakan fitur JMS.
Peningkatan layanan
Jika terjadi peningkatan dan restart Service Bus, antrean sementara atau topik dihapus. Jika aplikasi Anda sensitif terhadap kehilangan data pada antrean atau topik sementara, jangan gunakan antrean atau topik sementara. Gunakan antrean, topik, dan langganan yang tahan lama.
Migrasi data
Sebagai bagian dari migrasi dan memodifikasi aplikasi klien Anda untuk berinteraksi dengan Azure Service Bus, data yang ada di ActiveMQ tidak dimigrasikan ke Service Bus. Anda mungkin memerlukan aplikasi kustom untuk menguras antrean, topik, dan langganan ActiveMQ, lalu memutar ulang pesan ke antrean, topik, dan langganan Service Bus.
Autentikasi dan Otorisasi
Kontrol akses berbasis peran Azure (Azure RBAC), yang didukung oleh MICROSOFT Entra ID, adalah mekanisme autentikasi pilihan untuk Bus Layanan. Untuk mengaktifkan kontrol akses berbasis peran, ikuti langkah-langkah di panduan pengembang Azure Bus Layanan JMS 2.0.
Pra-migrasi
Pemeriksaan versi
Anda menggunakan komponen dan versi berikut saat menulis aplikasi JMS:
Komponen | Versi |
---|---|
Java Message Service (JMS) API | 1.1 atau lebih tinggi |
Protokol AMQP | 1,0 |
Pastikan port AMQP terbuka
Service Bus mendukung komunikasi melalui protokol AMQP. Untuk tujuan ini, aktifkan komunikasi melalui port 5671 (AMQP) dan 443 (TCP). Tergantung di mana aplikasi klien dihosting, Anda mungkin memerlukan tiket dukungan untuk memungkinkan komunikasi melalui port ini.
Penting
Service Bus hanya mendukung protokol AMQP 1.0.
Menyiapkan konfigurasi perusahaan
Service Bus memungkinkan berbagai keamanan perusahaan dan fitur ketersediaan tinggi. Untuk informasi selengkapnya, lihat:
- Titik akhir layanan jaringan virtual
- Firewall
- Enkripsi sisi layanan dengan kunci dikelola oleh pelanggan (BYOK)
- Titik Akhir Privat
- Autentikasi dan Otorisasi
Pemantauan, pemberitahuan, dan pelacakan
Untuk setiap namespace Service Bus, Anda menerbitkan metrik ke Azure Monitor. Anda dapat menggunakan metrik ini untuk pemberitahuan dan penskalaan dinamis sumber daya yang dialokasikan ke namespace.
Untuk informasi selengkapnya tentang berbagai metrik dan cara menyiapkan pemberitahuan di dalamnya, lihat Metrik Service Bus di Azure Monitor. Anda juga dapat mengetahui lebih lanjut tentang pelacakan sisi klien untuk operasi data dan pencatatan operasional/diagnostik untuk operasi manajemen.
Metrik - Peninggalan Baru
Anda dapat menghubungkan metrik mana dari peta ActiveMQ yang metriknya di Azure Service Bus. Lihat yang berikut ini dari situs web New Relic:
Catatan
Saat ini, New Relic tidak memiliki integrasi langsung dan mulus dengan ActiveMQ, tetapi memiliki metrik yang tersedia untuk Amazon MQ. Karena Amazon MQ berasal dari ActiveMQ, tabel berikut memetakan metrik New Relic dari Amazon MQ ke Azure Service Bus.
Pengelompokan metrik | Metrik Amazon MQ/ActiveMQ | Metrik Azure Service Bus |
---|---|---|
Perantara | CpuUtilization |
CPUXNS |
Perantara | MemoryUsage |
WSXNS |
Perantara | CurrentConnectionsCount |
activeConnections |
Perantara | EstablishedConnectionsCount |
activeConnections + connectionsClosed |
Perantara | InactiveDurableTopicSubscribersCount |
Menggunakan metrik langganan |
Perantara | TotalMessageCount |
Menggunakan level antrean/topik/langganan activeMessages |
Antrean/Topik | EnqueueCount |
incomingMessages |
Antrean/Topik | DequeueCount |
outgoingMessages |
Antrean | QueueSize |
sizeBytes |
Migration
Untuk memigrasikan aplikasi JMS 2.0 yang ada untuk berinteraksi dengan Service Bus, ikuti langkah-langkah di beberapa bagian berikutnya.
Ekspor topologi dari ActiveMQ dan buat entitas di Service Bus (opsional)
Untuk memastikan bahwa aplikasi klien dapat terhubung dengan Service Bus dengan lancar, migrasikan topologi (termasuk antrean, topik, dan langganan) dari Apache ActiveMQ ke Service Bus.
Catatan
Untuk aplikasi JMS, Anda membuat antrean, topik, dan langganan sebagai operasi runtime. Sebagian besar penyedia JMS (perantara pesan) memberi Anda kemampuan untuk membuat ini pada saat runtime. Itu sebabnya langkah ekspor ini dianggap opsional. Untuk memastikan bahwa aplikasi Anda memiliki izin untuk membuat topologi pada waktu proses, gunakan string koneksi dengan izin SAS Manage
.
Cara melakukan:
- Gunakan alat baris perintah ActiveMQ untuk mengekspor topologi.
- Buat ulang topologi yang sama menggunakan templat Azure Resource Manager.
- Jalankan templat Azure Resource Manager.
Impor dependensi maven untuk implementasi Service Bus JMS
Untuk memastikan konektivitas yang mulus dengan Service Bus, tambahkan paket azure-servicebus-jms
sebagai dependensi ke file pom.xml
Maven, sebagai berikut:
<dependencies>
...
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus-jms</artifactId>
</dependency>
...
</dependencies>
Perubahan konfigurasi server aplikasi
Bagian ini disesuaikan dengan server aplikasi yang menghosting aplikasi klien Anda yang terhubung ke ActiveMQ.
Aplikasi musim semi
Memperbarui file application.properties
Jika Anda menggunakan aplikasi boot Spring untuk terhubung ke ActiveMQ, Anda akan menghapus properti khusus ActiveMQ dari file application.properties
.
spring.activemq.broker-url=<ACTIVEMQ BROKER URL>
spring.activemq.user=<ACTIVEMQ USERNAME>
spring.activemq.password=<ACTIVEMQ PASSWORD>
Kemudian, tambahkan properti khusus Service Bus ke file application.properties
.
azure.servicebus.connection-string=Endpoint=myEndpoint;SharedAccessKeyName=mySharedAccessKeyName;SharedAccessKey=mySharedAccessKey
Ganti ActiveMQConnectionFactory
dengan ServiceBusJmsConnectionFactory
Langkah selanjutnya adalah mengganti instans ActiveMQConnectionFactory
dengan ServiceBusJmsConnectionFactory
.
Catatan
Perubahan kode aktual khusus untuk aplikasi dan bagaimana dependensi dikelola, tetapi sampel berikut memberikan panduan tentang apa yang harus diubah.
Sebelumnya, Anda mungkin telah menginstantiasi objek ActiveMQConnectionFactory
, sebagai berikut:
String BROKER_URL = "<URL of the hosted ActiveMQ broker>";
ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);
Connection connection = factory.createConnection();
connection.start();
Sekarang, Anda mengubah ini untuk membuat instantiasi objek ServiceBusJmsConnectionFactory
, sebagai berikut:
ServiceBusJmsConnectionFactorySettings settings = new ServiceBusJmsConnectionFactorySettings();
String SERVICE_BUS_CONNECTION_STRING = "<Service Bus Connection string>";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(SERVICE_BUS_CONNECTION_STRING, settings);
Connection connection = factory.createConnection();
connection.start();
Pasca-migrasi
Sekarang setelah Anda memodifikasi aplikasi untuk mulai mengirim dan menerima pesan dari Service Bus, Anda harus memverifikasi bahwa aplikasi ini berfungsi seperti yang Anda harapkan. Setelah selesai, Anda dapat melanjutkan untuk lebih menyempurnakan dan memodernisasi tumpukan aplikasi Anda.
Langkah berikutnya
Gunakan Spring Boot Starter untuk Azure Service Bus untuk integrasi mulus dengan Service Bus.
Untuk mempelajari selengkapnya tentang pesan Service Bus dan JMS, lihat: