Kolejka wiadomości a magistrala wiadomości - jakie są różnice?

101

Czy są jakieś? Według mnie MB zna zarówno subskrybentów, jak i wydawców i działa jako mediator, powiadamiając subskrybentów o nowych wiadomościach (w zasadzie model „push”). Z drugiej strony MQ to bardziej model „ściągania”, w którym konsumenci pobierają komunikaty z kolejki.

Czy jestem tutaj całkowicie zboczony?

Anton Gogolev
źródło

Odpowiedzi:

49

Ogólnie rzecz biorąc, jeśli chodzi o oprogramowanie dostawców, są one używane zamiennie i nie mają tak silnych rozróżnień pod względem wypychania lub ciągnięcia, jak to opisujesz.

BUS vs. KOLEJKI jest rzeczywiście nieco pojęciem dziedzictwo, ostatnio wynikające z systemów takich jak IBM MQ i Tibco Rendezvous. MQ pierwotnie był systemem 1: 1, w istocie kolejką oddzielającą różne systemy.

Natomiast Tibco było (sprzedawane jako) kręgosłupem przesyłania wiadomości, w którym można było mieć wielu wydawców i subskrybentów na te same tematy.

Jednak zarówno (jak i nowsze, konkurencyjne produkty) mogą w dzisiejszych czasach grać w swojej przestrzeni. Oba mogą być ustawione na przerywanie, jak również na odpytywanie nowych wiadomości. Obie pośredniczą w interakcjach między różnymi systemami.

Jednak fraza kolejka komunikatów jest również używana do wewnętrznych pomp komunikatów wewnątrz wątku i tym podobnych, aw tym kontekście użycie jest rzeczywiście inne. Jeśli myślisz o klasycznej pompie komunikatów systemu Windows, jest to rzeczywiście bardziej model ściągania, który opisujesz, ale tak naprawdę jest bardziej wewnątrz aplikacji niż między aplikacjami lub między skrzynkami.

sdg
źródło
116

Magistrala komunikatów

Message Bus jest infrastruktura wiadomości, aby umożliwić różne systemy do komunikacji przez wspólny zestaw interfejsów ( wiadomość autobusowego ).

wprowadź opis obrazu tutaj

Źródło: EIP

Kolejka wiadomości

Podstawowa idea kolejki komunikatów jest prosta:

  • Dwa (lub więcej) procesy mogą wymieniać informacje poprzez dostęp do wspólnej kolejki komunikatów systemu .

  • Proces wysyłania umieszcza za pośrednictwem jakiegoś modułu przesyłania komunikatów (OS) wiadomość w kolejce, która może zostać odczytana przez inny proces

Źródło: Dave Marshall

wprowadź opis obrazu tutaj

Źródło obrazu

Różnica

Kolejka wiadomości zawiera regułę FIFO ( pierwsze weszło, pierwsze wyszło ), podczas gdy w usłudze Message Bus jej nie ma.

Wniosek

Obydwa WYGLĄDA jak wykonywanie tego samego rodzaju pracy - przekazywanie komunikatów między dwiema aplikacjami lub modułami lub interfejsami lub systemami lub procesami , z wyjątkiem niewielkiej różnicy FIFO

vijay
źródło
4
Niekoniecznie prawda, niektóre kolejki pozwalają pomijać wiadomości. Chociaż ogólnie rzecz biorąc jest to naprawdę dobry sposób na rozróżnienie między nimi.
Tom
22
Zazwyczaj dodajesz punkty, gdy bierzesz skądś tekst i obrazy. Dodałem źródła.
jgauffin
26

Doszło do zatarcia linii między tymi dwiema koncepcjami, ponieważ niektóre produkty obsługują teraz funkcje, które wcześniej należały tylko do jednej lub drugiej kategorii (na przykład Azure Service Bus obsługuje oba podejścia).

KOLEJKA

Kolejka komunikatów odbiera komunikaty z aplikacji i udostępnia je jednej lub większej liczbie innych aplikacji w trybie FIFO (First In First Out). W wielu scenariuszach architektonicznych, jeśli aplikacja A musi wysyłać aktualizacje lub polecenia do aplikacji B i C, wówczas można skonfigurować oddzielne kolejki komunikatów dla B i C. A zapisywałby oddzielne komunikaty do każdej kolejki, a każda zależna aplikacja czytałaby z jej własna kolejka (wiadomość jest usuwana po dekolejce). Ani B, ani C nie muszą być dostępne, aby A mógł wysłać aktualizacje. Każda kolejka komunikatów jest trwała, więc jeśli aplikacja zostanie ponownie uruchomiona, zacznie pobierać ze swojej kolejki po ponownym podłączeniu do trybu online. Pomaga to przełamać zależności między zależnymi systemami i może zapewnić aplikacjom większą skalowalność i odporność na błędy.

AUTOBUS

Magistrala komunikatów lub magistrala usług umożliwia jednej (lub większej liczbie) aplikacji przekazywanie komunikatów do jednej lub większej liczby innych aplikacji. Może nie być gwarancji zamówienia „pierwsze weszło pierwsze wyszło”, a abonenci autobusu mogą przychodzić i wychodzić bez wiedzy nadawców wiadomości. Zatem aplikacja A może zostać napisana w celu przekazywania aktualizacji statusu do aplikacji B za pośrednictwem magistrali komunikatów. Później napisano aplikację C, która również może skorzystać z tych aktualizacji. Aplikację C można skonfigurować tak, aby nasłuchiwała magistrali komunikatów i podejmowała działania również na podstawie tych aktualizacji, bez konieczności aktualizacji aplikacji A. W przeciwieństwie do kolejek, w których aplikacja wysyłająca jawnie dodaje komunikaty do każdej kolejki, magistrala komunikatów używa funkcji publikowania / subskrybuj model. Wiadomości są publikowane w magistrali i każda aplikacja, która zasubskrybowała tego rodzaju wiadomość, otrzyma ją.

ŹRÓDŁO

Jibran
źródło
15

Główną różnicą, która nie została wyraźnie wspomniana w innych odpowiedziach, jest to, że magistrala komunikatów zezwala na wielu subskrybentów, podczas gdy kolejka będzie usuwać elementy z kolejki jeden po drugim do wszystkiego, co jest w kolejce. Gdybyś chciał, aby wielu słuchaczy widziało te same pozycje wychodzące z kolejki, musiałbyś sobie z tym poradzić, autobus usługowy zrobiłby to za Ciebie po wyjęciu z pudełka.

Matt
źródło
1
Przynajmniej nie do końca prawda. Usługi takie jak Amazon SQS umożliwiłyby odczyt tej samej wiadomości wielu czytelnikom. Okres „niewidzialności” jest konfigurowalny. Wiele systemów kolejek ma takie funkcje - a także ponowienia i kolejki utraconych wiadomości.
Tom
2
@Tom OP nie wspomniał o żadnych konkretnych produktach, więc myślę, że próbuje zrozumieć terminologię i koncepcje - w związku z tym uznałem tę odpowiedź za przydatną i prawdziwą; nawet jeśli prawdą jest, że dostawcy tworzą produkty hybrydowe w oparciu o obie koncepcje, myślę, że terminologia jest nadal aktualna i użyteczna.
mindplay.dk
4

Widzę to, że kolejka wiadomości tworzy magistralę wiadomości . Klienci (tj. Węzły) mogą wtedy nasłuchiwać magistrali komunikatów. Jest to szczególnie prawdziwe w przypadku, gdy masz MQ rozgłaszający wiadomości przez UDP, innymi słowy, wysyła wiadomości na adres broadcast / multicast bez wiedzy lub dbałości o to, kto je otrzyma. Bardziej szczegółowy opis tego scenariusza można znaleźć w tym artykule .

rdalmeida
źródło
0

Service Bus to termin bardziej ogólny niż kolejka wiadomości.

MQ to proste FIFO, ale istnieją bardziej wyrafinowane sposoby implementacji Service Bus, tj. Event Hub, który jest ogromnym „centrum” manipulowania komunikatami. Oprócz funkcjonalności dostarczanej przez MQ, pozwala na przechowywanie wiadomości (a tym samym korzystanie z wielu abonentów) itp

Novellizator
źródło
0

Magistrala komunikatów to model dystrybucji 1 do wielu. Miejsce docelowe w tym modelu jest zwykle nazywane tematem lub tematem. Ta sama opublikowana wiadomość jest odbierana przez wszystkich subskrybentów. Można to również nazwać modelem „rozgłoszeniowym”. Możesz myśleć o temacie jako o odpowiedniku tematu we wzorcu projektowym obserwatora dla przetwarzania rozproszonego. Niektórzy dostawcy magistrali komunikatów efektywnie decydują się na implementację tego jako UDP zamiast TCP. W przypadku tematu wiadomość jest dostarczana w trybie „odpal i zapomnij” - jeśli nikt nie słucha, wiadomość po prostu znika. Jeśli nie tego chcesz, możesz skorzystać z „trwałych subskrypcji”.

Kolejka komunikatów jest miejscem docelowym komunikatów 1 do 1. Wiadomość jest odbierana tylko przez jednego z odbiorników odbierających (uwaga: konsekwentne używanie subskrybentów dla klienta tematu i odbiorcy dla klienta kolejki pozwala uniknąć nieporozumień). Wiadomości wysłane do kolejki są przechowywane na dysku lub w pamięci, dopóki ktoś ich nie odbierze lub nie wygaśnie. Dlatego kolejki (i trwałe subskrypcje) wymagają aktywnego zarządzania pamięcią masową, należy więc pomyśleć o powolnych konsumentach.

Twierdzę, że w większości środowisk tematy są lepszym wyborem, ponieważ zawsze można dodać dodatkowe komponenty bez konieczności zmiany architektury. Dodane komponenty mogą obejmować monitorowanie, logowanie, analitykę, itp. Na początku projektu nigdy nie wiadomo, jakie będą wymagania za 1 rok, 5 lat, 10 lat. Zmiana jest nieunikniona, przyjmij ją :-)

Axel Podehl
źródło