HermesJMS dan Alat JMS Browser: Fungsi, Cara Kerja, Alternatif

HermesJMS adalah aplikasi desktop open source berbasis Java Swing yang populer di era 2000-an untuk melihat isi queue dan topic JMS. Dengan alat ini developer bisa menjelajah pesan, mencari berdasarkan isi atau header, menyalin pesan dari satu queue ke queue lain, memindahkan, dan menghapusnya lewat antarmuka grafis, untuk berbagai provider JMS. Proyek tersebut sudah lama tidak dikembangkan, jadi untuk pekerjaan sekarang Anda lebih baik memakai alat yang masih aktif seperti JMSToolBox, konsol web ActiveMQ Artemis, RabbitMQ management UI, atau IBM MQ Explorer.

Catatan: blog ini memakai domain hermesjms.com, tetapi bukan situs resmi proyek HermesJMS dan tidak berafiliasi dengan pengembang aslinya. Kami tidak menyediakan unduhan maupun dukungan untuk aplikasi tersebut. Blog ini berisi catatan seputar Java, messaging, dan integrasi sistem.

Apa itu JMS browser

JMS browser adalah alat untuk mengintip isi destination di message broker tanpa harus menulis program kecil setiap kali. Bayangkan Anda mendapat laporan “pesanan dari checkout tidak diproses”. Pertanyaan pertama biasanya: apakah pesannya sampai ke queue? Berapa yang menumpuk? Seperti apa isinya? Apakah ada pesan yang formatnya rusak? JMS browser menjawab pertanyaan itu dalam hitungan detik.

Fungsi yang umum ada di alat sejenis:

  • Menampilkan daftar queue dan topic beserta jumlah pesannya.
  • Melihat header, property, dan body setiap pesan.
  • Mencari pesan berdasarkan teks atau message selector.
  • Mengirim pesan uji secara manual.
  • Menyalin atau memindahkan pesan, misalnya dari dead letter queue kembali ke queue asal.
  • Mengekspor pesan ke file untuk analisis atau sebagai data uji.

Cara kerjanya di balik layar

Sebagian besar JMS browser bekerja sebagai klien JMS biasa. Untuk melihat pesan tanpa mengambilnya, alat tersebut memakai QueueBrowser, API standar JMS yang membaca isi queue tanpa menghapus pesan. Kodenya kira-kira seperti ini (di dalam method yang mendeklarasikan throws JMSException):

try (JMSContext context = cf.createContext()) {
    Queue queue = context.createQueue("pesanan.baru");
    QueueBrowser browser = context.createBrowser(queue, "sumber = 'checkout'");
    Enumeration<?> daftar = browser.getEnumeration();
    while (daftar.hasMoreElements()) {
        Message m = (Message) daftar.nextElement();
        System.out.println(m.getJMSMessageID() + " -> " + m.getBody(String.class));
    }
}

Argumen kedua createBrowser adalah message selector, filter mirip klausa WHERE di SQL yang bekerja pada header dan property. Ada beberapa hal yang perlu diketahui tentang QueueBrowser:

  • Hasilnya adalah potret sesaat. Pesan bisa datang atau diambil consumer lain ketika Anda sedang menjelajah.
  • Spesifikasi tidak mewajibkan browser menampilkan semua pesan; sebagian broker membatasi jumlahnya, misalnya hanya pesan yang sedang ada di memori.
  • Topic tidak bisa di-browse dengan API ini karena pesan di topic tidak tersimpan dalam satu antrean. Yang bisa dilihat biasanya antrean milik durable subscription, dan itu bergantung pada fitur broker.

Operasi “pindahkan” pada JMS browser umumnya adalah kombinasi menerima pesan dari queue asal lalu mengirim salinannya ke queue tujuan, idealnya dalam satu sesi transaksi agar pesan tidak hilang atau terduplikasi bila proses terputus di tengah jalan. Alat yang memakai API manajemen broker (JMX, REST, atau protokol manajemen khusus) bisa melakukan lebih banyak hal, seperti menghitung pesan secara akurat atau memindahkan pesan langsung di sisi server.

Kenapa HermesJMS dulu populer

Pada masanya, setiap vendor punya konsol sendiri yang tampilannya berbeda-beda, dan sebagian bahkan tidak punya konsol yang nyaman. HermesJMS menawarkan satu antarmuka untuk banyak provider: Anda cukup menambahkan JAR klien provider dan mengonfigurasi connection factory, lalu bisa bekerja dengan cara yang sama terhadap broker apa pun. Bagi tim yang mengelola beberapa broker sekaligus, ini menghemat waktu. Fitur seperti menyimpan pesan ke file lalu mengirimkannya ulang juga berguna untuk pengujian.

Masalahnya, aplikasi Swing lama dengan konfigurasi classpath manual makin sulit dijalankan di JDK modern, dan tidak ada dukungan untuk klien baru yang memakai package jakarta.jms. Untuk pekerjaan sehari-hari, alat yang masih dirawat jauh lebih aman.

Alternatif yang masih aktif

Alat Jenis Cocok untuk
JMSToolBox Aplikasi desktop open source Satu klien untuk banyak provider JMS, semangatnya mirip HermesJMS
Konsol web ActiveMQ Artemis Web, bawaan broker Melihat address dan queue, menjelajah pesan, memindahkan atau menghapus pesan di Artemis
RabbitMQ management UI Web, plugin bawaan RabbitMQ Memantau queue, exchange, dan koneksi, serta mengambil atau menerbitkan pesan uji
IBM MQ Explorer Aplikasi desktop dari IBM Administrasi queue manager IBM MQ dan menelusuri pesan

Selain alat GUI, jangan lupakan CLI. ActiveMQ Artemis punya perintah artemis yang bisa menampilkan statistik queue serta mengirim atau menerima pesan uji, sedangkan RabbitMQ punya rabbitmqctl dan rabbitmqadmin. CLI enak dipakai di server tanpa tampilan grafis dan bisa dimasukkan ke skrip.

Tips memakai JMS browser di lingkungan produksi

  1. Gunakan akun hanya-baca bila memungkinkan. Banyak insiden terjadi karena salah klik “hapus” di queue produksi.
  2. Jangan sembarangan membuka body pesan berisi data pribadi. Nama, alamat, dan nomor telepon pelanggan tetap data sensitif walau hanya terlihat di layar debugging.
  3. Catat sebelum memindahkan. Simpan ID pesan dan alasan pemindahan, terutama saat memproses ulang dari dead letter queue.
  4. Waspadai efek browse pada broker. Menjelajah queue berisi jutaan pesan bisa membebani memori broker. Pakai selector atau batasi jumlah pesan yang ditampilkan.
  5. Pastikan consumer tahan duplikat sebelum mengirim ulang. Memindahkan pesan kembali ke queue asal berarti pesan itu akan diproses lagi.

Pesan yang menumpuk di dead letter queue adalah alasan paling sering orang membuka JMS browser. Cara menyelidiki penyebabnya dan memproses ulang dengan aman saya uraikan di artikel pesan macet di queue: redelivery dan dead letter queue.

Kapan menulis alat sendiri

Untuk tugas yang berulang, misalnya setiap pagi memeriksa dead letter queue dan mengirim ringkasan ke tim, skrip kecil berbasis QueueBrowser atau API manajemen broker sering lebih praktis daripada membuka GUI. Skrip juga mudah ditinjau di repositori, punya riwayat perubahan, dan bisa dijalankan terjadwal. Simpan GUI untuk investigasi yang sifatnya eksploratif, ketika Anda belum tahu persis apa yang dicari.

Satu prinsip yang berlaku untuk alat apa pun: pisahkan kegiatan melihat dari kegiatan mengubah. Melihat isi queue nyaris tanpa risiko, sedangkan memindahkan atau menghapus pesan mengubah data produksi. Perlakukan tindakan kedua seperti perubahan database: ada alasan, ada catatan, dan bila mungkin ada orang kedua yang meninjau.

Hendra Kurniawan

Oleh Hendra Kurniawan

Pengembang backend Java yang lama menangani integrasi sistem dan message broker. Menulis catatan praktis tentang JMS, API, dan arsitektur aplikasi.