Dławienie SQS mieć maksymalnie 1 w locie wiadomość przekraczania wszystkich abonentów?

głosy
1

Mam sytuacji gdzie mam wyzwalający proces długo działa na microservice przez SQS wiadomości. Mam wiele instancji tego samego microservice ale chcę tylko jednej instancji do uruchomienia zadania. Czy istnieje sposób, aby określić, że kolejka powinna dostarczyć tylko 1 wiadomość i czekać, aż reagują abonenta lub osiągnie limit czasu widoczność?

Dzięki

Utwórz 18/12/2018 o 11:09
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

SQS już robi to za ciebie. Atrybut „Timeout widoczność” zapewnia, że ​​zadanie jest widoczne tylko dla 1 pracownika, jeśli dopasuj ją do maksymalnego czasu wykonania.

Pracownik pobiera obiekt z SQS. SQS zapewnia, że ​​dostarczany jest tylko raz i niewidoczne dla innych w czasie timeout widoczności. Należy podać maksymalny czas wykonania zadania. Powiedzmy 5 minut. I umieścić wyższy limit czasu widoczności. Powiedzmy 6 minut. Po tym czasie, jeżeli pracownik nie powodzeniem wykonywane zadanie pozycja będzie niewidoczny dla innych jeszcze przez minutę, a potem wrócić do kolejki. Po tym inny pracownik może odebrać wiadomość i jest niewidoczny dla innych znowu 6 minut. Na sukces pracownik powinien usunąć komunikat.

W ten sposób można zapewnić, że każdy element zostanie przetworzony tylko te.

Odpowiedział 18/12/2018 o 11:23
źródło użytkownik

głosy
0

Chcę wysłać jedną wiadomość tylko subscriberA i poczekać aż proces subscriberA komunikat całkowicie lub do czasu timeout. Nie mogę zobaczyć jak uniknąć subscriberB do odebrania kolejnej wiadomości z kolejki, aż do wykończenia subscriberA

To dziwne, że masz tak jak architektura. Że uczyni korzystanie z jednego abonenta w czasie, więc flota abonent / multi instancji microservice nie jest właściwe.

Jeśli to możliwe, proszę po prostu niech jeden z microservices Subskrypcja / poll kolejkę

W przeciwnym razie trzeba będzie to na własną rękę. Moja sugestia:

  • Mają dwie kolejki. Jednym z kolejki będą otrzymywać wszystkie wiadomości. Jednym z kolejki służyłoby komunikat do swoich abonentów. Baza kodu nie będzie musiał zmienić wiele, czy to set-up tak
  • Konfigurowanie funkcji Lambda wyzwalany przez odbierający SQS. Ustawić współbieżność tej funkcji do 1, wyregulować opóźnienie dostawy swojego SQS udusić jak chcesz
  • Funkcja musi sprawdzić służąca SQS czy komunikat jest w tej kolejce (waitting lub przetwarzanych) przez GetQueueAttributes API
  • Wysłać wiadomość z wyświetlaniem SQS jeśli to za darmo lub zwraca komunikat z powrotem na otrzymywanie-SQS
Odpowiedział 19/12/2018 o 06:37
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more