Pada umumnya, jika menyangkut produk perangkat lunak vendor, produk tersebut digunakan secara bergantian, dan tidak memiliki perbedaan yang kuat dalam hal mendorong atau menarik seperti yang Anda gambarkan.
The BUS vs ANTRIAN memang agak konsep warisan, baru-baru ini berasal dari sistem seperti IBM MQ dan Tibco Rendezvous. MQ awalnya adalah sistem 1: 1, memang merupakan antrian untuk memisahkan berbagai sistem.
Sebaliknya, Tibco (dijual sebagai) tulang punggung perpesanan, di mana Anda dapat memiliki banyak penerbit dan pelanggan pada topik yang sama.
Namun keduanya (dan produk pesaing yang lebih baru) dapat bermain di ruang satu sama lain hari ini. Keduanya dapat diatur ke interupsi serta polling untuk pesan baru. Keduanya memediasi interaksi antara berbagai sistem.
Namun frase message-queue juga digunakan untuk pompa pesan intra-thread internal dan sejenisnya, dan dalam konteks ini, penggunaannya memang berbeda. Jika Anda memikirkan pompa pesan Windows klasik, ini memang lebih merupakan model tarik yang Anda gambarkan, tetapi sebenarnya lebih intra-aplikasi daripada antar-aplikasi atau antar-kotak.
Ada beberapa garis yang kabur di antara dua konsep ini, karena beberapa produk sekarang mendukung fitur yang sebelumnya hanya dimiliki oleh satu atau kategori lainnya (misalnya Azure Service Bus mendukung kedua pendekatan).
ANTRE
Antrian pesan menerima pesan dari aplikasi dan membuatnya tersedia untuk satu atau lebih aplikasi lain dengan cara pertama masuk pertama keluar (FIFO). Dalam banyak skenario arsitektur, jika aplikasi A perlu mengirim pembaruan atau perintah ke aplikasi B dan C, maka antrian pesan yang terpisah dapat diatur untuk B dan C. A akan menulis pesan terpisah ke setiap antrian, dan setiap aplikasi yang bergantung akan membaca dari antriannya. antrean sendiri (pesan dihapus setelah di-dequeued). Baik B maupun C tidak perlu tersedia agar A dapat mengirim pembaruan. Setiap antrian pesan tetap ada, jadi jika aplikasi dimulai ulang, ia akan mulai menarik dari antriannya setelah kembali online. Ini membantu memutus ketergantungan antara sistem dependen dan dapat memberikan skalabilitas dan toleransi kesalahan yang lebih besar untuk aplikasi.
BIS
Bus pesan atau bus layanan menyediakan cara bagi satu (atau lebih) aplikasi untuk mengkomunikasikan pesan ke satu atau lebih aplikasi lain. Mungkin tidak ada jaminan pemesanan pertama masuk pertama keluar, dan pelanggan bus dapat datang dan pergi tanpa sepengetahuan pengirim pesan. Jadi, aplikasi A dapat ditulis untuk mengkomunikasikan pembaruan status ke aplikasi B melalui bus pesan. Nanti, aplikasi C ditulis yang juga bisa mendapatkan keuntungan dari pembaruan ini. Aplikasi C dapat dikonfigurasi untuk mendengarkan bus pesan dan mengambil tindakan berdasarkan pembaruan ini juga, tanpa memerlukan pembaruan apa pun ke aplikasi A. Tidak seperti antrean, di mana aplikasi pengirim secara eksplisit menambahkan pesan ke setiap antrean, bus pesan menggunakan terbitkan / model berlangganan. Pesan dipublikasikan ke bus, dan aplikasi apa pun yang telah berlangganan pesan semacam itu akan menerimanya.
SUMBER
sumber
Perbedaan utama yang belum benar-benar disebutkan secara eksplisit dalam jawaban lain adalah bahwa bus pesan memungkinkan banyak pelanggan sedangkan antrian akan menghapus item satu per satu ke apa pun yang mendengarkan antrian. Jika Anda ingin banyak pendengar melihat item yang sama keluar dari antrean, Anda harus menanganinya sendiri, bus layanan akan melakukan ini di luar kotak untuk Anda.
sumber
Cara saya melihatnya adalah bahwa Antrian Pesan membuat Bus Pesan . Klien (yaitu node) kemudian dapat mendengarkan bus pesan. Hal ini terutama berlaku untuk kasus di mana Anda memiliki pesan penyiaran MQ melalui UDP, dengan kata lain, mengirimkan pesan ke alamat broadcast / multicast tanpa mengetahui atau peduli siapa yang akan menerimanya. Untuk penjelasan yang lebih mendalam tentang skenario ini, Anda dapat memeriksa artikel ini .
sumber
Bus Layanan adalah istilah yang lebih umum daripada Antrian Pesan.
MQ adalah FIFO sederhana, tetapi ada cara yang lebih canggih untuk mengimplementasikan Bus Layanan, yaitu Event Hub, yang merupakan "pusat" besar untuk memanipulasi pesan. Selain fungsionalitas yang disediakan oleh MQ, ini memungkinkan untuk menyimpan pesan (dan karenanya menggunakan banyak pelanggan) dll
sumber
Bus pesan adalah model distribusi 1-ke-banyak. Destinasi dalam model ini biasanya disebut topik atau subjek. Pesan yang diterbitkan sama diterima oleh semua pelanggan yang mengonsumsi. Anda juga bisa menyebutnya model 'siaran'. Anda dapat menganggap suatu topik setara dengan Subjek dalam pola desain Observer untuk komputasi terdistribusi. Beberapa penyedia bus pesan secara efisien memilih untuk mengimplementasikan ini sebagai UDP, bukan TCP. Untuk topik pengiriman pesan adalah 'api-dan-lupakan' - jika tidak ada yang mendengarkan, pesan akan hilang begitu saja. Jika bukan itu yang Anda inginkan, Anda dapat menggunakan 'langganan tahan lama'.
Antrian pesan adalah tujuan pesan 1-ke-1. Pesan hanya diterima oleh salah satu penerima yang mengonsumsi (harap diperhatikan: secara konsisten menggunakan pelanggan untuk 'klien topik dan penerima untuk klien antrean menghindari kebingungan). Pesan yang dikirim ke antrian disimpan di disk atau memori sampai seseorang mengambilnya atau kedaluwarsa. Jadi, antrean (dan langganan yang tahan lama) memerlukan beberapa manajemen penyimpanan aktif, Anda perlu memikirkan konsumen yang lambat.
Di sebagian besar lingkungan, menurut saya, topik adalah pilihan yang lebih baik karena Anda selalu dapat menambahkan komponen tambahan tanpa harus mengubah arsitektur. Komponen yang ditambahkan dapat berupa pemantauan, logging, analitik, dll. Anda tidak pernah tahu di awal proyek seperti apa persyaratannya dalam 1 tahun, 5 tahun, 10 tahun. Perubahan tidak bisa dihindari, terimalah :-)
sumber