5

Potrzebuję zbudować system, który używa magistrali Publish/Subscribe (np. Mule, ZeroMQ, RabbitMQ), ale literatura wszystko wskazuje, że aplikacje abonenta są niezawodnie dostępne do odbierania wiadomości z tematów do których subskrybują, gdy tylko autobus Pub/Sub jest w stanie dostarczyć wiadomość.PubSub + Niezawodne dostarczanie wiadomości do niewiarygodnie obecnych subskrybentów

Mam system, w którym niektóre aplikacje będą niezawodnie połączone z magistralą Publish/Subscribe, ale inne aplikacje nie będą aktywne lub podłączone do magistrali przez cały czas.

Oczywistym rozwiązaniem jest posiadanie pewnego rodzaju protokołu "obecności" pomiędzy niewiarygodną aplikacją a magistralą Publikuj/Subskrybuj, aby "obecne" aplikacje otrzymywały komunikaty natychmiast, a aplikacje "nieobecne" mają wiadomości w kolejce do wiadomości w jakimś trwałym buforze, a gdy tylko zakończą "uzgadnianie obecności", kolejkowane wiadomości są dostarczane do nowo obecnej aplikacji.

Czy istnieją jakieś autobusy publikowania/subskrypcji, które mają wbudowaną taką funkcję, lub czy są jakieś dodatki typu open-source, które to robią? Czy możesz wskazać mi jakieś adresy URL, które opisują to?

Odpowiedz

4

Możesz łatwo osiągnąć to zachowanie za pomocą dowolnego brokera zgodnego z AMQP (takiego jak RabbitMQ).

Wybierz właściwy typ wymiany dla używanego modelu. Będziesz chciał użyć wymiany direct, jeśli zawsze wysyłasz do absolutnie nazwanych miejsc docelowych, np. chat.messages.

Aby wykonać trasowanie oparte na wzorach, należy użyć wymiany topic. Następnie możesz wyznaczyć trasę na podstawie wzorców takich, jak chat.messages.*.

Routing jest opisany bardziej szczegółowo w RabbitMQ Tutorials.

Aby utworzyć rodzaj trwałej subskrypcji, o której wspominasz, każdy z subskrybentów powinien utworzyć kolejkę prywatną dla tego subskrybenta. Kolejka jest następnie przypisana do odpowiednich kluczy routingu na wybranej giełdzie.

Ponieważ każdy subskrybent ma własną kolejkę, wiadomości będą pobierane przez subskrybenta, gdy będą aktywne i przechowywane, gdy subskrybent jest nieaktywny lub odłączony.

0

Nie wspomniano o wybranym języku, ale w języku Java można to zrobić za pomocą JMS przy użyciu durable subscribers. Każda implementacja JMS (there are many, w tym wspomniana wcześniej RabbitMQ) będzie obsługiwać tę funkcję.

Powiązane problemy