Mam aplikację usługową korzystającą z usługi Amazon SQS z wieloma kolejkami i wieloma klientami. Robię to, aby móc zaimplementować architekturę opartą na zdarzeniach i oddzielić wszystkie usługi, w których różne usługi reagują na zmiany w stanie innych systemów. Na przykład:Używanie usługi Amazon SQS z wieloma klientami
- usługi rejestracji:
- emituje przypadku, gdy nowy użytkownik "Rejestracja rejestrów nowy.
- Użytkownik Serwisu:
- Emituje wydarzenie 'user-updated', gdy użytkownik jest aktualizowana.
- Szukaj usługi:
- odczytuje z kolejki 'registration-nowy' i indeksy użytkownik w poszukiwaniu.
- Odczytuje z kolejki "zaktualizowanej przez użytkownika" i aktualizuje użytkownika w wyszukiwaniu.
- Metrics usługi:
- odczytuje z kolejki 'nowy' rejestracyjnym i wysyła do Mixpanel.
- Odczytuje z kolejki "zaktualizowanej przez użytkownika" i wysyła do Mixpanel.
Mam szereg zagadnień:
- Wiadomość może zostać odebrane wiele razy, gdy robi odpytywanie. Potrafię zaprojektować wiele systemów, aby były idempotentne, ale w przypadku niektórych usług (takich jak usługa metryk) byłoby znacznie trudniej.
- Wiadomość musi zostać ręcznie usunięta z kolejki w SQS. Myślałem o wdrożeniu "usługi obsługi komunikatów", która zajmuje się usuwaniem komunikatów, gdy wszystkie usługi je otrzymały (każda usługa wyemitowała zdarzenie "potwierdzone komunikatem" po obsłudze wiadomości).
Domyślam się, że moje pytanie jest następujące: jakie wzorce należy użyć, aby zapewnić, że mogę mieć wielu klientów dla pojedynczej kolejki w SQS, jednocześnie zapewniając, że wiadomości są również dostarczane niezawodnie i usuwane. Dziękuję za pomoc.
To jest idealne. Nie wiedziałem, że możesz to zrobić z SNS! Dziękuję Ci! – user2205763