Jawaban:
JMS (ActiveMQ adalah implementasi broker JMS) dapat digunakan sebagai mekanisme untuk memungkinkan pemrosesan permintaan tidak sinkron. Anda mungkin ingin melakukan ini karena permintaan membutuhkan waktu lama untuk diselesaikan atau karena beberapa pihak mungkin tertarik dengan permintaan yang sebenarnya. Alasan lain untuk menggunakannya adalah untuk memungkinkan beberapa klien (berpotensi ditulis dalam berbagai bahasa) untuk mengakses informasi melalui JMS. ActiveMQ adalah contoh yang baik di sini karena Anda dapat menggunakan protokol STOMP untuk memungkinkan akses dari klien C # / Java / Ruby.
Contoh dunia nyata adalah aplikasi web yang digunakan untuk melakukan pemesanan untuk pelanggan tertentu. Sebagai bagian dari menempatkan pesanan itu (dan menyimpannya dalam database) Anda mungkin ingin membawa sejumlah tugas tambahan:
Untuk melakukan ini, kode aplikasi Anda akan menerbitkan pesan ke antrian JMS yang mencakup id pesanan. Salah satu bagian dari aplikasi Anda yang mendengarkan antrian dapat merespons acara dengan mengambil orderId, mencari pesanan di database dan kemudian menempatkan pesanan itu dengan sistem pihak ketiga lainnya. Bagian lain dari aplikasi Anda mungkin bertanggung jawab untuk mengambil orderId dan mengirim email konfirmasi kepada pelanggan.
Gunakan mereka sepanjang waktu untuk memproses operasi yang berjalan lama secara tidak sinkron. Pengguna web tidak ingin menunggu lebih dari 5 detik untuk diproses. Jika Anda memiliki satu yang berjalan lebih lama dari itu, satu desain adalah untuk mengirimkan permintaan ke antrian dan segera mengirim kembali URL yang dapat diperiksa pengguna untuk melihat kapan pekerjaan itu selesai.
Publikasikan / berlangganan adalah teknik lain yang baik untuk memisahkan pengirim dari banyak penerima. Ini adalah arsitektur yang fleksibel, karena pelanggan dapat datang dan pergi sesuai kebutuhan.
Saya memiliki begitu banyak kegunaan luar biasa untuk JMS:
Komunikasi obrolan web untuk layanan pelanggan.
Debug logging di backend. Semua server aplikasi menyiarkan pesan debug di berbagai tingkatan. Klien JMS kemudian dapat diluncurkan untuk menonton pesan debug. Tentu saya bisa menggunakan sesuatu seperti syslog , tetapi ini memberi saya segala macam cara untuk menyaring output berdasarkan informasi kontekstual (misalnya dengan nama server aplikasi, panggilan api, tingkat log, userid, jenis pesan, dll ...). Saya juga mewarnai keluarannya.
Debug logging ke file. Sama seperti di atas, hanya potongan tertentu yang ditarik menggunakan filter, dan masuk ke file untuk pencatatan umum.
Peringatan. Sekali lagi, pengaturan yang mirip dengan pencatatan di atas, mengamati kesalahan tertentu, dan mengingatkan orang melalui berbagai cara (email, pesan teks, IM, pop-up Growl ...)
Mengkonfigurasi dan mengendalikan kluster perangkat lunak secara dinamis. Setiap server aplikasi akan menyiarkan pesan "configure me", kemudian daemon konfigurasi yang akan merespons dengan pesan yang berisi semua jenis info konfigurasi. Kemudian, jika semua server aplikasi memerlukan konfigurasi mereka berubah sekaligus, itu bisa dilakukan dari daemon konfigurasi.
Dan transaksi biasa - antri untuk aktivitas yang tertunda seperti penagihan, pemrosesan pesanan, penyediaan, pembuatan email ...
Ini bagus di mana saja Anda ingin menjamin pengiriman pesan secara tidak sinkron.
Distribusi (a) komputasi sinkron.
Contoh dunia nyata bisa berupa kerangka kerja pemberitahuan seluruh aplikasi, yang mengirimkan surat kepada para pemangku kepentingan di berbagai titik selama penggunaan aplikasi. Jadi aplikasi akan bertindak sebagai Producer
dengan membuat Message
objek, meletakkannya pada tertentu Queue
, dan bergerak maju.
Akan ada satu set Consumer
s yang akan berlangganan Queue
pertanyaan tersebut, dan akan berhati-hati menangani yang Message
dikirim menyeberang. Perhatikan bahwa selama transaksi ini, Producer
s dipisahkan dari logika bagaimana suatu pemberian Message
akan ditangani.
Kerangka pesan (ActiveMQ dan sejenisnya) bertindak sebagai tulang punggung untuk memfasilitasi Message
transaksi tersebut dengan menyediakan MessageBroker
.
Saya telah menggunakannya untuk mengirim perdagangan intraday antara berbagai sistem manajemen dana. Jika Anda ingin mempelajari lebih lanjut tentang apa itu perpesanan teknologi yang hebat, saya sepenuhnya dapat merekomendasikan buku " Pola Integrasi Perusahaan ". Ada beberapa contoh JMS untuk hal-hal seperti permintaan / balasan dan publikasikan / berlangganan.
Pesan adalah alat yang sangat baik untuk integrasi.
Kami menggunakannya untuk memulai pemrosesan asinkron yang kami tidak ingin mengganggu atau bertentangan dengan transaksi yang ada.
Misalnya, Anda memiliki logika yang mahal dan sangat penting seperti "beli barang", bagian penting dari barang beli adalah 'beri tahu toko barang'. Kami membuat notifikasi panggilan asinkron sehingga logika / pemrosesan apa pun yang terlibat dalam notifikasi panggilan tidak memblokir atau bersaing dengan sumber daya dengan logika bisnis beli. Hasil akhir, beli selesai, pengguna senang, kami mendapatkan uang kami dan karena antrian dijamin pengiriman toko akan diberitahu segera setelah dibuka atau segera setelah ada item baru dalam antrian.
Saya telah menggunakannya untuk proyek akademik saya yang merupakan situs web ritel online yang mirip dengan Amazon. JMS digunakan untuk menangani fitur-fitur berikut:
Kami juga telah menerapkan beberapa klien jarak jauh yang terhubung ke Server utama. Jika koneksi tersedia, mereka gunakan untuk mengakses database utama atau jika tidak menggunakan database mereka sendiri. Untuk menangani konsistensi data, kami telah menerapkan mekanisme 2PC. Untuk ini, kami menggunakan JMS untuk bertukar pesan antara sistem ini yaitu satu bertindak sebagai koordinator yang akan memulai proses dengan mengirim pesan pada antrian dan yang lain akan merespons sesuai dengan mengirim kembali pesan pada antrian. Seperti yang telah disebutkan orang lain, ini mirip dengan model pub / sub.
Saya telah melihat JMS digunakan dalam berbagai proyek komersial dan akademik. JMS dapat dengan mudah masuk ke dalam gambar Anda, kapan pun Anda ingin memiliki sistem terdistribusi yang sepenuhnya dipisahkan. Secara umum, ketika Anda perlu mengirim permintaan Anda dari satu node, dan seseorang di jaringan Anda menanganinya tanpa / dengan memberi pengirim informasi tentang penerima.
Dalam kasus saya, saya telah menggunakan JMS dalam mengembangkan pesan-berorientasi middleware (MOM) dalam tesis saya, di mana jenis objek berorientasi objek tertentu dihasilkan di satu sisi sebagai permintaan Anda, dan dikompilasi dan dieksekusi di sisi lain sebagai respons Anda .
Apache Camel yang digunakan bersama dengan ActiveMQ adalah cara terbaik untuk melakukan Pola Integrasi Enterprise
Kami menggunakan JMS untuk komunikasi dengan sistem di sejumlah besar situs jarak jauh melalui jaringan yang tidak dapat diandalkan. Sambungan longgar dalam kombinasi dengan pesan yang andal menghasilkan lanskap sistem yang stabil: Setiap pesan akan dikirim segera jika secara teknis memungkinkan, masalah yang lebih besar dalam jaringan tidak akan memengaruhi seluruh lanskap sistem ...