ServiceStack Messaging API: czy może transmitować?

Oct 28 2020

Jak wspomniałem wcześniej , używam ServiceStack Messaging API ( ), a także bardziej niskiego poziomu .IMessageQueueClient.PublishIRedisClient.PublishMessage

Używam Messaging API, gdy potrzebuję, aby konkretna wiadomość / żądanie zostało przetworzone tylko przez jedną instancję modułu / usługi, więc nawet jeśli mam kilka uruchomionych modułów, których wszyscy nasłuchują MyRequest, tylko jedna usługa odbiera wiadomość i przetwarza ją.

Używam IRedisClient.PublishMessagekiedy zrobić transmisję, sytuację pub / sub, wysyłając wniosek, że każdy powinien otrzymywać który nasłuchuje na tym konkretnym kanale Redis.

Jednak jestem w sytuacji, w której przydałoby się skorzystać z Messaging API, ale przeprowadzić emisję, tak aby wszystkie instancje , które nasłuchują określonego typu wiadomości, otrzymały wiadomość, a nie tylko tę.

(Powodem tego jest usprawnienie korzystania z Redis i sposobu, w jaki subskrybujemy zdarzenia / żądania, ale nie będę teraz wchodził w szczegóły na ten temat. Więcej informacji na ten temat znajduje się tutaj ).

Czy istnieje „sposób nadawania” interfejsu Messaging API?

Odpowiedzi

mythz Oct 28 2020 at 01:58

Nie, celem ServiceStack Messaging jest po prostu wywołanie usług ServiceStack za pośrednictwem MQ. Wszelkie inne funkcje MQ wykraczają poza cel i zakres usługi ServiceStack MQ. Zamiast tego należy opracować je bezpośrednio w oparciu o interfejsy API dostawcy MQ, aby uzyskać dostęp do ich funkcji rozgłaszania.

Zdarzenia serwera to funkcja ServiceStack, która obsługuje rozgłaszanie wiadomości do subskrybentów kanałów zdefiniowanych przez użytkownika, ale jest to zupełnie inna implementacja, która obsługuje inny przypadek użycia do wysyłania zdarzeń „wypychania serwera” w czasie rzeczywistym przez HTTP lub gRPC, np. Nie t używaj brokerów MQ, a komunikaty pub / sub nie są trwałe (tj. tylko subskrybenci w momencie wysyłania wiadomości będą je otrzymywać).