Antrian Pesan vs Bus Pesan - apa perbedaannya?


97

Dan apakah ada? Bagi saya, MB mengenal baik pelanggan maupun penerbit dan bertindak sebagai mediator, memberi tahu pelanggan tentang pesan baru (secara efektif merupakan model "push"). MQ, di sisi lain, lebih merupakan model "tarik", di mana konsumen menarik pesan dari antrian.

Apakah saya benar-benar keluar jalur di sini?

Jawaban:


47

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.


114

Bus Pesan

Sebuah Pesan Bus adalah infrastruktur messaging untuk memungkinkan sistem yang berbeda untuk berkomunikasi melalui set bersama interface ( pesan bus ).

masukkan deskripsi gambar di sini

Sumber: EIP

Antrian Pesan

Ide dasar dari antrian pesan sederhana saja:

  • Dua (atau lebih) proses dapat bertukar informasi melalui akses ke antrian pesan sistem umum .

  • Proses pengiriman menempatkan melalui beberapa modul message-passing (OS) pesan ke antrian yang dapat dibaca oleh proses lain

Sumber: Dave Marshall

masukkan deskripsi gambar di sini

Sumber gambar

Perbedaan

Message Queue berisi aturan FIFO ( first in first out ) sedangkan di Message Bus tidak.

Kesimpulan

Keduanya TERLIHAT seperti melakukan jenis pekerjaan yang sama - meneruskan pesan antara dua Aplikasi atau Modul atau Antarmuka atau Sistem atau Proses , kecuali perbedaan kecil dari FIFO


4
Belum tentu benar, beberapa antrean memungkinkan Anda melewati pesan. Meskipun secara umum, ini adalah cara yang sangat baik untuk membuat perbedaan antara keduanya.
Tom

22
Anda biasanya menambahkan kredit saat Anda mengambil teks dan gambar dari suatu tempat. Saya telah menambahkan sumber.
jgauffin

25

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


15

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.


1
Tidak sepenuhnya benar, setidaknya lagi. Layanan seperti Amazon SQS akan memungkinkan pesan yang sama dibaca oleh banyak pembaca. Periode "tembus pandang" dapat dikonfigurasi. Banyak sistem antrean memiliki fitur seperti itu - serta percobaan ulang dan antrean surat mati.
Tom

2
@Tom OP tidak menyebutkan produk tertentu, jadi saya pikir dia mencoba memahami terminologi dan konsep - untuk efek itu, saya menemukan jawaban ini berguna dan benar; kalaupun benar bahwa vendor membuat produk hybrid berdasarkan kedua konsep tersebut, menurut saya terminologi tersebut masih valid dan berguna.
mindplay.dk

4

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 .


0

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


0

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 :-)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.