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?
Tematy dotyczą modelu wydawca-subskrybent, a kolejki są punkt-punkt.
źródło
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ą :-)
źródło
To takie proste:
źródło
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.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.
źródło
Kolejki
Plusy
Cons
Tematy
Plusy
Cons
źródło
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.
źródło
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
źródło
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.
źródło