Załóżmy, że mam 100 wątków czytających z tych samych kwantów - czy gwarantuje się, że każda wiadomość zostanie dostarczona najwyżej raz? Czy w ogóle możliwe jest dostarczenie tej samej wiadomości więcej niż raz? Nie mogę znaleźć żadnej jasnej dokumentacji na ten temat. sSQS dostarczanie wiadomości tylko raz
Odpowiedz
Aktualizacja 17 listopada 2016:FIFO queueing with guaranteed-once delivery został właśnie wydany dzisiaj (prawie 2 lata po tym odpowiedź została pierwotnie wysłane) i SQS obsługuje dostawy dokładnie jednorazowe. Oto szczegóły:
- Musisz utworzyć FIFO Queue.
- Kontrola deduplikacji dla
MessageDeduplicationId
jako atrybutu komunikatu kolejki i zapobiega duplikowaniu wiadomości przed wysłaniem i otrzymaniem w 5-minutowym odstępie czasu deduplikacji po wykonaniu każdej z tych czynności, sprawdzając numerMessageDeduplicationId
. - Jeśli deduplikacja oparta na treści jest jawnie włączona w kolejce FIFO,
MessageDeduplicationId
zostanie automatycznie wygenerowany przy użyciu skrótu SHA-256 treści wiadomości (tylko treść, a nie atrybuty). - Jeśli deduplikacja oparta na treści nie jest włączona, musisz jawnie ustawić własną dowolną wartość dla
MessageDeduplicationId
przy wysyłaniu. W przeciwnym razie SendMessage zakończy się niepowodzeniem z błędem.
Oparte na zawartości deduplikację można włączyć, gdy creating a queue lub updating the queue' attributes.
Więcej informacji na temat dokumentu MessageDeduplicationId w dokumentacji SendMessage i ReceiveMessage.
Po 17 listopada 2016 roku, to nadal ma zastosowanie do standardowych (nie-FIFO) kolejkach:
Ze względu na charakter rozproszony standardowych (nie-FIFO) kolejek w SQS, gwarancja jest zamiast tego "co najmniej" raz.
Z FAQ:
Q: Ile razy będę odbierać każdą wiadomość?
Amazon SQS został zaprojektowany tak, aby dostarczać "co najmniej raz" wszystkie wiadomości w kolejkach. Mimo że w większości przypadków każda wiadomość będzie dostarczana do aplikacji dokładnie jeden raz, należy zaprojektować swój system , aby przetwarzanie wiadomości więcej niż jeden raz nie powodowało błędów ani niespójności w postaci .
Więcej informacji na at least once dostawy:
Amazon SQS przechowuje kopie wiadomości na wielu serwerach dla redundancji i wysokiej dostępności. W rzadkich przypadkach jeden z serwerów przechowujących kopię wiadomości może być niedostępny po otrzymaniu lub usunięciu wiadomości. Jeśli tak się stanie, kopia wiadomości nie zostanie usunięta na tym niedostępnym serwerze, a możesz otrzymać kopię wiadomości ponownie, gdy odbierzesz wiadomości. Z tego powodu musisz zaprojektować swoją aplikację jako idempotentną (tzn. Nie można jej negatywnie wpłynąć, jeśli przetwarza ten sam komunikat więcej niż jeden raz).
Jeśli naprawdę potrzebujesz, aby zagwarantować „co najwyżej jeden raz” przetwarzania w aplikacji, można aplikacja sprawdzić unique identifiers of SQS messages i nie procesowe wiadomość identyfikatory, które zostały zrealizowane wcześniej, lub są aktualnie przetwarza.
- 1. PubSub + Niezawodne dostarczanie wiadomości do niewiarygodnie obecnych subskrybentów
- 2. Jak opóźnić dostarczanie wiadomości JMS przy użyciu usługi HornetQ?
- 3. Uruchom setUp tylko raz
- 4. jQuery - Zrób tylko raz
- 5. view.getDrawingCache() działa tylko raz
- 6. onPreviewframe tylko wywoływana raz
- 7. .replaceWith() działa tylko raz
- 8. layoutAnimacja działa tylko raz
- 9. Wiosenna chmura - SQS
- 10. Wystrzelić jedno wydarzenie tylko raz?
- 11. onReceive działa tylko raz Android
- 12. wywołanie setInterval działa tylko raz
- 13. setInterval - Jak strzelać tylko raz?
- 14. Kliknięcie przycisku tylko raz (js)
- 15. Preformowanie bloku kodu tylko raz
- 16. Tylko pętle Foreach Loop raz
- 17. Android: "Ekran powitalny" tylko raz
- 18. Powiadomienie jQuery Tools działa raz (ale tylko raz)
- 19. SQS z konfiguracją naciowego
- 20. Ruby1.9 i Amazon SQS?
- 21. SQS vs RabbitMQ
- 22. Zwolnienie komunikatu do SQS
- 23. Oznaczenie Amazon SQS
- 24. Przykład aplikacji .net przy użyciu Amazon SQS
- 25. Uzyskaj tylko treść wiadomości WCf
- 26. Jak wyświetlić ekran logowania tylko jeden raz?
- 27. Tylko jeden przycisk radiowy wybrany na raz
- 28. Wzajemne kolumna Friend, wybierz parę tylko raz
- 29. Angular/Ionic - kontroler działa tylko raz
- 30. HTML5 geolokalizacja watchPosition nazywanie tylko raz
Największe pytanie dotyczy tego, czy może to nastąpić w bardzo krótkim czasie. Czy wątek 1 i wątek 2 mogą otrzymać tę samą wiadomość w ciągu sekundy od każdego żądania. Tego nie mogłem znaleźć w dokumentacji. Przyjąłem odpowiedź tak czy owak, ponieważ zbliża się ona do tego, czego szukałem. – Vladimir
Oczywiście, jest jeszcze jedno pytanie, które dokładnie zadał pytanie: http://stackoverflow.com/questions/28130677/time-period-between-duplicate-messages –
Skąd mam wiedzieć, czy praca jest obecnie przetwarzana? –