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
  • MENGINJAK
  • OpenWire
AMQP
Mode provisi
  • Infrastruktur sebagai layanan (IaaS), lokal
  • Amazon MQ (platform terkelola sebagai layanan)
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
  • JMSContext.createQueue( String queueName)
Didukung
Topik
  • JMSContext.createTopic( String topicName)
Didukung
Antrean sementara
  • JMSContext.createTemporaryQueue()
Didukung
Topik sementara
  • JMSContext.createTemporaryTopic()
Didukung
Produser Pesan /
JMSProducer
  • JMSContext.createProducer()
Didukung
Antrean browser
  • JMSContext.createBrowser(Antrean Antrean)
  • JMSContext.createBrowser(Queue queue, String messageSelector)
Didukung
Konsumen Pesan/
JMSConsumer
  • JMSContext.createConsumer( Tujuan tujuan)
  • JMSContext.createConsumer( Tujuan, Pesan stringSelector)
  • JMSContext.createConsumer( Destination destination, String messageSelector, boolean noLocal)

noLocal saat ini tidak didukung
Didukung
Langganan bersama yang tahan lama
  • JMSContext.createSharedDurableConsumer(Topik topik, Nama string)
  • JMSContext.createSharedDurableConsumer(Topik, Nama string, pesan StringSelector)
Didukung
Langganan privat yang tahan lama
  • JMSContext.createDurableConsumer(Topik topik, Nama string)
  • createDurableConsumer(Topik topik, Nama string, String messageSelector, boolean noLocal)

noLocal saat ini tidak didukung dan harus diatur ke false
Didukung
Langganan bersama yang tidak tahan lama
  • JMSContext.createSharedConsumer(Topik topik, String sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Topik topik, String sharedSubscriptionName, String messageSelector)
Didukung
Langganan privat yang tidak tahan lama
  • JMSContext.createConsumer(Tujuan tujuan)
  • JMSContext.createConsumer( Tujuan, Pesan stringSelector)
  • JMSContext.createConsumer( Tujuan, Pesan stringSelector, boolean noLocal)

noLocal saat ini tidak didukung dan harus diatur ke false
Didukung
Pemilih pesan tergantung pada konsumen yang dibuat Didukung
Penundaan Pengiriman (pesan terjadwal)
  • JMSProducer.setDeliveryDelay(long deliveryDelay)
Didukung
Pesan dibuat
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage( Objek serializable)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage( Teks string)
Didukung
Transaksi lintas entitas
  • Koneksi ion.createSession(true, Session.SESSION_TRANSACTED)
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:

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:

  1. Gunakan alat baris perintah ActiveMQ untuk mengekspor topologi.
  2. Buat ulang topologi yang sama menggunakan templat Azure Resource Manager.
  3. 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 ActiveMQConnectionFactorydengan 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: