Untuk apa ActiveMQ digunakan - dapatkah kita menerapkan konsep perpesanan menggunakan Database?
116
Saya mencarinya dan digunakan untuk mengirim pesan antara 2 sistem.
Tapi kenapa? Mengapa Anda tidak menggunakan saja Database?
Harus ada beberapa fitur yang ActiveMQmemiliki yang Databasestidak?
Ini digunakan untuk berkomunikasi dengan andal antara dua proses terdistribusi.
Ya, Anda bisa menyimpan pesan dalam database untuk berkomunikasi antara dua proses, tetapi segera setelah pesan diterima Anda harus ke DELETEpesan, Itu berarti baris INSERTdan DELETEuntuk setiap pesan.
Ketika Anda mencoba untuk skala bahwa sampai berkomunikasi ribuan pesan per detik, Database cenderung jatuh .
Perangkat tengah berorientasi pesan [MOM] seperti ActiveMQdi sisi lain dibuat untuk menangani kasus penggunaan tersebut.
Mereka berasumsi bahwa pesan dalam sistem yang sehat akan dihapus dengan sangat cepat dan dapat melakukan pengoptimalan untuk menghindari overhead .
Itu juga dapat mendorong pesan ke konsumen daripada konsumen harus melakukan polling untuk pesan baru dengan melakukan kueri SQL.
Ini semakin mengurangi latensi yang terlibat dalam pemrosesan pesan baru yang dikirim ke sistem.
Penjelasan yang bagus! Apakah kedua proses terdistribusi harus dalam proses yang sama? Maksud saya dua contoh dari aplikasi yang sama?
Maverick
Tidak, aplikasi sewenang-wenang dapat berkomunikasi satu sama lain melalui ActiveMQ. Misalnya, aplikasi A dan B dapat membuat qeues AB dan BA (baca: pesan untuk A dari B dan sebaliknya) dan saling mengirim pesan ke antrian yang cocok.
ActiveMQ, atau secara umum semua implementasi Message Oriented Middleware (MOM) dirancang untuk tujuan pengiriman pesan antara dua aplikasi, atau dua komponen di dalam satu aplikasi.
Pada dasarnya, MOM dan database berbagi dasar yang sama dalam menyediakan penyimpanan data transaksional dan persisten untuk dapat membaca dan menulis.
Perbedaan besar adalah pola penggunaan - di mana database sangat umum dan dioptimalkan untuk pencarian kompleks di beberapa tabel, MOM dioptimalkan untuk membaca pesan, satu per satu, dalam mode seperti FIFO [Antrian].
JMS, yang merupakan implementasi API ActiveMQ, merupakan landasan penting dalam aplikasi Java Enterprise. Hal ini membuat pesan berbagi format dan semantik yang agak umum, yang membuat integrasi antara aplikasi yang berbeda menjadi lebih mudah.
Tentu saja, ada banyak fitur yang lebih rinci yang hanya di ActiveMQ, protokol kawat seperti OpenWire, STOMPdan MQTT, JMS, EIPbersama-sama dengan Apache Camel, pola pesan seperti "permintaan / balasan" dan "mempublikasikan / berlangganan", JMS Bridging, klastering (" jaringan pialang "), yang memungkinkan penskalaan dan distribusi, dll.
Anda harus membaca sedikit tentang topik tersebut jika Anda tertarik karena topiknya agak besar.
ActiveMQmemiliki dukungan penjadwal yang hebat , yang berarti Anda dapat menjadwalkan pengiriman pesan Anda untuk dikirim pada waktu tertentu .
Kami telah menggunakan fitur ini untuk mengirimkan pengingat pengobatan kepada pasien yang mengunggah detail pengobatan mereka dalam skenario perawatan kesehatan.
Itu sangat keren. Kami telah menggunakan perpustakaan penjadwalan Quartz untuk tujuan pengingat serupa.
Siddhartha
Kami telah menggunakan database Oracle Scheduled Jobsuntuk tujuan yang sama.
ahmednabil88
15
Dengan RDBMS, saat Anda memproses baris data, Anda biasanya memperbarui sebuah tanda yang menunjukkan bahwa baris tersebut telah diproses sehingga pemrosesan tidak berulang.
Namun, dengan Antrean Pesan, Anda hanya perlu menerima pesan dan konsumen berikutnya akan memproses pesan berikutnya.
Perbedaannya adalah bahwa UPDATEstatment dalam RDBMS adalah operasi yang sangat lambat dibandingkan dengan acknowledgein activmeq.
Terpisah : Sistem dapat berkomunikasi tanpa terhubung. Antrian terletak di antara sistem, satu kegagalan sistem tidak akan pernah mempengaruhi yang lain karena komunikasi dilakukan melalui Antrian. Sistem terus bekerja saat sudah aktif.
Dukungan pemulihan : Pesan dalam Antrian itu sendiri tetap ada. Pesan dapat dikembalikan nanti jika Antrian gagal.
Komunikasi yang Andal : Pertimbangkan sistem yang memproses permintaan klien. Dalam kasus normal, sistem menerima 100 permintaan per menit. Sistem ini tidak dapat diandalkan ketika jumlah permintaan melebihi rata-rata. Dalam kasus seperti itu, Queue dapat mengelola permintaan dan dapat mendorong pesan secara berkala berdasarkan throughput sistem tanpa memutusnya.
Asinkron : Komunikasi server klien tidak memblokir. Setelah klien mengirim permintaan ke server, ia dapat melakukan operasi lain tanpa menunggu respons. Ketika respon yang diterima klien dapat menanganinya kapan saja.
Apache ActiveMQ adalah broker pesan open source yang ditulis di Java bersama dengan klien Java Message Service (JMS) penuh. Ini menyediakan "Fitur Perusahaan" yang dalam hal ini berarti membina komunikasi dari lebih dari satu klien atau server
Mengenai pertanyaan Anda:
Mengapa Anda tidak menggunakan database?
Anda harus menggunakan database untuk data persisten dan bukan untuk data sementara. Asumsikan bahwa Anda harus mengirim pesan dari Pengirim ke Penerima. Saat Menerima pesan, Penerima menjalankan satu operasi (menerima, memproses, dan melupakan). Setelah memproses pesan itu, Anda tidak membutuhkan pesan itu sama sekali. Dalam kasus ini, menyimpan pesan dalam database yang persisten bukanlah solusi yang tepat.
Saya sepenuhnya setuju dengan jawaban @Hiram Chirino tentang memasukkan & menghapus pesan dalam database jika Anda menggunakan database daripada sistem pesan.
Integrasi perusahaan : Mengizinkan aplikasi yang dibangun dengan bahasa berbeda dan pada sistem operasi berbeda untuk berintegrasi satu sama lain
Transparansi lokasi : Aplikasi klien tidak perlu mengetahui di mana lokasi aplikasi layanan
Komunikasi yang andal - produsen / konsumen pesan tidak harus tersedia pada saat yang bersamaan
Penskalaan - dapat menskalakan secara horizontal dengan menambahkan lebih banyak layanan
Komunikasi asinkron - klien dapat mengaktifkan pesan dan melanjutkan pemrosesan lain alih-alih memblokir hingga layanan mengirimkan tanggapan;
Pengurangan kopling - asumsi yang dibuat oleh klien dan layanan sangat berkurang sebagai hasil dari 5 manfaat sebelumnya. Layanan dapat mengubah detail tentang dirinya sendiri, termasuk lokasi, protokol, dan ketersediaannya, tanpa memengaruhi atau mengganggu klien.
Misalkan Anda memiliki aplikasi yang digunakan di beberapa lokasi pada waktu yang sama. Juga anggap aplikasi Anda harus menangani 1000 permintaan per menit atau sesuatu seperti itu sehingga operasi db normal tidak dapat menangani operasi seperti itu, Activemq bertindak sebagai pemrosesan pesan yang mengambil semua pesan ke dalam antrian, bahkan jika salah satu aplikasi Anda mogok di satu lokasi lokasi lain tidak akan terpengaruh.
Jawaban:
Ini digunakan untuk berkomunikasi dengan andal antara dua proses terdistribusi.
Ya, Anda bisa menyimpan pesan dalam database untuk berkomunikasi antara dua proses, tetapi segera setelah pesan diterima Anda harus ke
DELETE
pesan, Itu berarti barisINSERT
danDELETE
untuk setiap pesan.Ketika Anda mencoba untuk skala bahwa sampai berkomunikasi ribuan pesan per detik, Database cenderung jatuh .
Perangkat tengah berorientasi pesan [MOM] seperti
ActiveMQ
di sisi lain dibuat untuk menangani kasus penggunaan tersebut.Mereka berasumsi bahwa pesan dalam sistem yang sehat akan dihapus dengan sangat cepat dan dapat melakukan pengoptimalan untuk menghindari overhead .
Itu juga dapat mendorong pesan ke konsumen daripada konsumen harus melakukan polling untuk pesan baru dengan melakukan kueri SQL.
Ini semakin mengurangi latensi yang terlibat dalam pemrosesan pesan baru yang dikirim ke sistem.
sumber
ActiveMQ
, atau secara umum semua implementasi Message Oriented Middleware (MOM) dirancang untuk tujuan pengiriman pesan antara dua aplikasi, atau dua komponen di dalam satu aplikasi.Pada dasarnya, MOM dan database berbagi dasar yang sama dalam menyediakan penyimpanan data transaksional dan persisten untuk dapat membaca dan menulis.
Perbedaan besar adalah pola penggunaan - di mana database sangat umum dan dioptimalkan untuk pencarian kompleks di beberapa tabel, MOM dioptimalkan untuk membaca pesan, satu per satu, dalam mode seperti FIFO [Antrian].
JMS
, yang merupakan implementasi API ActiveMQ, merupakan landasan penting dalam aplikasi Java Enterprise. Hal ini membuat pesan berbagi format dan semantik yang agak umum, yang membuat integrasi antara aplikasi yang berbeda menjadi lebih mudah.Tentu saja, ada banyak fitur yang lebih rinci yang hanya di ActiveMQ, protokol kawat seperti
OpenWire
,STOMP
danMQTT
,JMS
,EIP
bersama-sama dengan Apache Camel, pola pesan seperti "permintaan / balasan" dan "mempublikasikan / berlangganan", JMS Bridging, klastering (" jaringan pialang "), yang memungkinkan penskalaan dan distribusi, dll.Anda harus membaca sedikit tentang topik tersebut jika Anda tertarik karena topiknya agak besar.
sumber
ActiveMQ
memiliki dukungan penjadwal yang hebat , yang berarti Anda dapat menjadwalkan pengiriman pesan Anda untuk dikirim pada waktu tertentu .Kami telah menggunakan fitur ini untuk mengirimkan pengingat pengobatan kepada pasien yang mengunggah detail pengobatan mereka dalam skenario perawatan kesehatan.
sumber
Scheduled Jobs
untuk tujuan yang sama.Dengan RDBMS, saat Anda memproses baris data, Anda biasanya memperbarui sebuah tanda yang menunjukkan bahwa baris tersebut telah diproses sehingga pemrosesan tidak berulang.
Namun, dengan Antrean Pesan, Anda hanya perlu menerima pesan dan konsumen berikutnya akan memproses pesan berikutnya.
Perbedaannya adalah bahwa
UPDATE
statment dalam RDBMS adalah operasi yang sangat lambat dibandingkan denganacknowledge
in activmeq.sumber
Saya ingin menekankan hal-hal berikut:
Terpisah : Sistem dapat berkomunikasi tanpa terhubung. Antrian terletak di antara sistem, satu kegagalan sistem tidak akan pernah mempengaruhi yang lain karena komunikasi dilakukan melalui Antrian. Sistem terus bekerja saat sudah aktif.
Dukungan pemulihan : Pesan dalam Antrian itu sendiri tetap ada. Pesan dapat dikembalikan nanti jika Antrian gagal.
Komunikasi yang Andal : Pertimbangkan sistem yang memproses permintaan klien. Dalam kasus normal, sistem menerima 100 permintaan per menit. Sistem ini tidak dapat diandalkan ketika jumlah permintaan melebihi rata-rata. Dalam kasus seperti itu, Queue dapat mengelola permintaan dan dapat mendorong pesan secara berkala berdasarkan throughput sistem tanpa memutusnya.
Asinkron : Komunikasi server klien tidak memblokir. Setelah klien mengirim permintaan ke server, ia dapat melakukan operasi lain tanpa menunggu respons. Ketika respon yang diterima klien dapat menanganinya kapan saja.
sumber
Dari Wikipedia
Mengenai pertanyaan Anda:
Anda harus menggunakan database untuk data persisten dan bukan untuk data sementara. Asumsikan bahwa Anda harus mengirim pesan dari Pengirim ke Penerima. Saat Menerima pesan, Penerima menjalankan satu operasi (menerima, memproses, dan melupakan). Setelah memproses pesan itu, Anda tidak membutuhkan pesan itu sama sekali. Dalam kasus ini, menyimpan pesan dalam database yang persisten bukanlah solusi yang tepat.
Saya sepenuhnya setuju dengan jawaban @Hiram Chirino tentang memasukkan & menghapus pesan dalam database jika Anda menggunakan database daripada sistem pesan.
Manfaat dari artikel ini dan artikel ini
Ada banyak. Lihat halaman dokumentasi untuk lebih jelasnya. Lihat juga kasus penggunaan .
Lihat presentasi ini untuk memahami internal ActiveMQ.
sumber
Misalkan Anda memiliki aplikasi yang digunakan di beberapa lokasi pada waktu yang sama. Juga anggap aplikasi Anda harus menangani 1000 permintaan per menit atau sesuatu seperti itu sehingga operasi db normal tidak dapat menangani operasi seperti itu, Activemq bertindak sebagai pemrosesan pesan yang mengambil semua pesan ke dalam antrian, bahkan jika salah satu aplikasi Anda mogok di satu lokasi lokasi lain tidak akan terpengaruh.
sumber