Temat JMS a kolejki

191

Zastanawiałem się, jaka jest różnica między kolejką JMS a tematem JMS.

Strona ActiveMQ mówi

Tematy

W JMS Temat implementuje semantykę publikowania i subskrybowania . Kiedy opublikujesz wiadomość, trafi ona do wszystkich zainteresowanych subskrybentów - więc zero dla wielu subskrybentów otrzyma kopię wiadomości. Tylko subskrybenci, którzy mieli aktywną subskrypcję w momencie otrzymania wiadomości przez brokera, otrzymają kopię wiadomości.

Kolejki

Kolejka JMS implementuje semantykę modułu równoważenia obciążenia . Pojedyncza wiadomość zostanie odebrana przez dokładnie jednego konsumenta. Jeśli w chwili wysłania wiadomości nie ma żadnych konsumentów, wiadomość będzie przechowywana do momentu, aż będzie dostępny konsument, który może przetworzyć wiadomość. Jeśli konsument otrzyma wiadomość i nie potwierdzi jej przed zamknięciem, wiadomość zostanie ponownie dostarczona innemu konsumentowi. Kolejka może mieć wielu klientów z równoważeniem obciążenia wiadomości wśród dostępnych klientów.

Chcę mieć „coś”, co wyśle ​​kopię wiadomości do każdego subskrybenta w tej samej kolejności, w jakiej wiadomość została odebrana przez brokera ActiveMQ.

jakieś pomysły?

Poliquin
źródło

Odpowiedzi:

147

Oznacza to, że temat jest odpowiedni. Kolejka oznacza, że ​​wiadomość trafia do jednego i tylko jednego możliwego subskrybenta. Temat trafia do każdego subskrybenta.

Joseph Ottinger
źródło
4
Masz pomysł, jak działa równoważenie obciążenia dla kolejek w JMS lub WSO2 MB?
Kulasangar 18.04.16
to interesujące, ponieważ próbowałem debugować jakiegoś subskrybenta, a podczas wysyłania tematu subskrybent nie został wywołany, ale zadziałał podczas wysyłania do kolejki
vmrvictor
54

Tematy dotyczą modelu wydawca-subskrybent, a kolejki są punkt-punkt.

Vikram
źródło
31

JMS temat jest rodzaj przeznaczenia w modelu 1 do wielu dystrybucji. Ta sama opublikowana wiadomość jest odbierana przez wszystkich abonentów . Możesz także nazwać to modelem „rozgłoszeniowym”. Temat można traktować jako odpowiednik tematu we wzorcu projektowym obserwatora dla przetwarzania rozproszonego. Niektórzy dostawcy JMS efektywnie wybierają implementację tego jako UDP zamiast TCP. W przypadku tematu dostarczenie wiadomości to „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”.

Kolejki JMS jest miejscem 1-do-1 wiadomości. Wiadomość jest odbierana tylko przez jednego z odbiorców odbierających (uwaga: konsekwentne używanie subskrybentów dla klienta tematu i odbiorników dla klienta kolejki pozwala uniknąć zamieszania). Wiadomości wysyłane do kolejki są przechowywane na dysku lub w pamięci, dopóki ktoś jej nie odbierze lub nie wygaśnie. Więc kolejki (i trwałe subskrypcje) wymagają aktywnego zarządzania pamięcią masową, musisz pomyśleć o powolnych konsumentach.

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

Axel Podehl
źródło
28

To takie proste:

Kolejki = Wstaw> Wycofaj (wyślij do pojedynczego subskrybenta) 1: 1

Tematy = Wstaw> Transmisja (wysyłanie do wszystkich subskrybentów) 1: n

wprowadź opis zdjęcia tutaj

Daniel Perník
źródło
2
Przykładem może być prosta sieć społecznościowa. Ktoś „lubi” post. Backend publikuje zdarzenie „POST LIKE” w tym temacie. Jest zużywany przez 3 subskrybentów: notificationProcessor(wysyła powiadomienie do plakatu), karmaProcessor(daje karmę polubieniu i plakatowi), feedProcessor(przesuwa jot w górę na kanały ludzkie). Wszystko oczywiście asynchronicznie.
Siddhartha
@ Siddhartha, to może być odpowiedź zawarta w przykładzie, dzięki!
wszystkie mn
8

Jeśli chodzi o zachowanie zamówienia, zobacz tę stronę ActiveMQ . Krótko mówiąc: zamówienie jest zachowane dla pojedynczych konsumentów, ale w przypadku wielu konsumentów kolejność dostaw nie jest gwarantowana.

eebbesen
źródło
7

Kolejki

Plusy

  • Prosty wzorzec wiadomości z przejrzystym przepływem komunikacji
  • Wiadomości można odzyskać, umieszczając je z powrotem w kolejce

Cons

  • Tylko jeden konsument może otrzymać wiadomość
  • Implikuje powiązanie między producentem a konsumentem, ponieważ jest to relacja jeden do jednego

Tematy

Plusy

  • Wielu konsumentów może otrzymać wiadomość
  • Oddzielenie płatności od producenta i konsumenta (wzorzec publikowania i subskrybowania)

Cons

  • Bardziej skomplikowany przepływ komunikacji
  • Nie można odzyskać wiadomości dla jednego odbiornika
abhimanyu
źródło
4

Jeśli masz N konsumentów, to:

Tematy JMS dostarczają wiadomości do N z N Kolejki JMS dostarczają wiadomości do 1 z N

Powiedziałeś, że „szukasz czegoś, co wyśle ​​kopię wiadomości do każdego subskrybenta w tej samej kolejności, w jakiej wiadomość została odebrana przez brokera ActiveMQ”.

Więc chcesz użyć tematu, aby wszyscy N subskrybenci otrzymali kopię wiadomości.

Hans Jespersen
źródło
1

TEMAT :: temat to komunikacja od jednego do wielu ... (wielopunktowy lub opublikuj / subskrybuj) EX: - wyobraź sobie, że wydawca publikuje film w youtubie, wtedy wszyscy jego subskrybenci otrzymają powiadomienie .... QUEVE :: queve jest jeden do -jedna komunikacja ... Np .: -Gdy opublikujesz prośbę o doładowanie, trafi ona tylko do jednego qrecievera ... zawsze pamiętaj, że jeśli prośba dotarła do wszystkich qreceiverów, to nastąpiło wielokrotne ładowanie, więc opracowując analizę, która jest odpowiednia dla aplikacji

Siddartha Kamble
źródło
-1

Kolejka to obiekt zarządzany przez JMS służący do przechowywania wiadomości oczekujących na zużycie przez subskrybentów. Gdy wszyscy subskrybenci wykorzystają wiadomość, wiadomość zostanie usunięta z kolejki.

Temat polega na tym, że wszyscy subskrybenci danego tematu otrzymują tę samą wiadomość po opublikowaniu wiadomości.

Geetha reddy Manukonda
źródło
2
Wiadomości z kolejki będą konsumowane tylko raz przez jednego konsumenta, dlatego kolejka implementuje moduł równoważenia obciążenia. Subskrypcje tematów mogą być trwałe : subskrybent może otrzymać wiadomość długo po publikacji (na przykład, jeśli subskrybent został zamknięty i pojawi się ponownie).
Gruber