Penggunaan JMS / antrian pesan di dunia nyata? [Tutup]

182

Saya baru saja membaca abit tentang JMS dan Apache ActiveMQ. Dan bertanya-tanya untuk apa dunia nyata menggunakan orang di sini JMS atau teknologi antrian pesan serupa?

tidak
sumber

Jawaban:

191

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:

  • Simpan pesanan dalam semacam sistem back-end pihak ketiga (seperti SAP)
  • Kirim email ke pelanggan untuk memberi tahu mereka bahwa pesanan mereka telah dilakukan

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.

Jon
sumber
Hai @ Anda sudah melihat tag Dokumentasi ini? stackoverflow.com/documentation/jms/commit mereka hanya perlu satu dukungan committer untuk mengaktifkan topik, saya pikir Anda bisa menjadi
orangnya
@Jon seperti yang saya mengerti jms itu sendiri adalah implementasi dari pola integrasi perusahaan?
valik
Tidak, Mule atau Unta akan menjadi ...
Jon
1
Jika ada sejumlah aplikasi yang menggunakan pesan dalam antrian, bagaimana antrian mengetahui kapan harus menghapus pesan lama?
Basil Bourque
95

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.

Duffymo
sumber
41
Setelah membaca jawaban Anda, saya akan menambahkan JMS ke antrian saya 'Apa yang akan saya pelajari tahun ini' :)
Roman
Di zaman kita, alih-alih menggunakan spec JMS, kita dapat menggunakan metode panggilan asinkron. Untuk info lebih lanjut, lihat: docs.oracle.com/javaee/6/tutorial/doc/gkkqg.html
geo
3
Mereka tidak persis sama. Tidak ada pengiriman yang dijamin dengan pemanggilan metode asynch; tidak ada gagasan tentang topik yang dapat dikirim ke beberapa pendengar sekaligus.
duffymo
75

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.

mikesomeone
sumber
5
Sepertinya tidak benar bagi saya untuk menggunakan JMS untuk debug logging. Antrian dan olahpesan memiliki biaya yang signifikan dan pencatatan (untuk debugging yang biasanya mencatat banyak) harus secepat mungkin.
Marco Altieri
19

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 Producerdengan membuat Messageobjek, meletakkannya pada tertentu Queue, dan bergerak maju.
Akan ada satu set Consumers yang akan berlangganan Queuepertanyaan tersebut, dan akan berhati-hati menangani yang Messagedikirim menyeberang. Perhatikan bahwa selama transaksi ini, Producers dipisahkan dari logika bagaimana suatu pemberian Messageakan ditangani.
Kerangka pesan (ActiveMQ dan sejenisnya) bertindak sebagai tulang punggung untuk memfasilitasi Messagetransaksi tersebut dengan menyediakan MessageBroker.

pugmarx
sumber
Saya ingin pemrosesan asinkron karena RestService Api sinkron. Bagaimana cara melakukannya dengan ActiveMq dan Jms. Tolong bantu ini. stackoverflow.com/questions/19706788/… . Terima kasih atas bantuan dan waktu Anda
Kumar
10

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.

RichardOD
sumber
8

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.

Kevin Williams
sumber
1
Tolong bantu ini. stackoverflow.com/questions/19706788/… . Terima kasih atas bantuan dan waktu Anda.
Kumar
2
Tetapi karena permintaan tidak sinkron, karena masalah jaringan, pesan Anda mungkin tidak terkirim. Bagaimana dengan ini? Ketika Anda ingin membeli barang, nitification Anda harus dikirim. iya kan?
grep
8

Saya telah menggunakannya untuk proyek akademik saya yang merupakan situs web ritel online yang mirip dengan Amazon. JMS digunakan untuk menangani fitur-fitur berikut:

  1. Perbarui posisi pesanan yang dilakukan oleh pelanggan, karena kiriman bergerak dari satu lokasi ke lokasi lain. Ini dilakukan dengan terus mengirim pesan ke Antrian JMS.
  2. Mengingatkan tentang peristiwa tidak biasa seperti pengiriman yang tertunda dan kemudian mengirim email ke pelanggan.
  3. Jika pengiriman mencapai tujuannya, mengirimkan acara pengiriman.

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.

qwerty
sumber
6

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 .

paradisonoir
sumber
6

Apache Camel yang digunakan bersama dengan ActiveMQ adalah cara terbaik untuk melakukan Pola Integrasi Enterprise

Rob Davies
sumber
5

Kami telah menggunakan pesan untuk menghasilkan Kutipan online

bluegene
sumber
4

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 ...

roundrobin
sumber