SQS Drosselung maximal 1 im Flug haben Nachricht alle Teilnehmer überqueren?

stimmen
1

Ich habe eine Situation, wo ich auf einem Micro durch eine sqs Nachricht einen langen laufenden Prozess am auslöst. Ich habe mehrere Instanzen des gleichen Micro aber ich möchte nur eine Instanz die Aufgabe auszuführen. Gibt es eine Möglichkeit zu geben, dass die Warteschlange nur 1 Nachricht liefern sollte und warten, bis die Teilnehmer reagieren oder sie die Sichtbarkeit Timeout erreichen?

Vielen Dank

Veröffentlicht am 18/12/2018 um 11:09
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

SQS bereits erledigt das für Sie. Das Attribut „Sichtbarkeits timeout“ stellt sicher, daß die Aufgabe 1 Arbeiter nur sichtbar ist, wenn man es mit der maximalen Ausführungszeit auszurichten.

Der Arbeiter wird das Objekt von SQS holen. SQS stellt sicher, dass es nur einmal geliefert wird und für andere unsichtbar in der Zeit der Sichtbarkeit Timeout. Sie sollten eine maximale Ausführungszeit für die Aufgabe geben. Sagen wir 5 Minuten. Und legt eine höhere Sichtbarkeit Timeout. Sagen wir 6 Minuten. Nach dieser Zeit, wenn der Arbeitnehmer nicht erfolgreich ausgeführt hat, die Aufgabe wird das Element für eine weitere Minute auf anderen unsichtbar und dann in die Warteschlange zurück. Danach kann ein anderer Arbeiter die Nachricht abholen und es ist wieder für 6 Minuten zu anderen unsichtbar. Bei Erfolg soll der Arbeitnehmer die Nachricht entfernen.

Auf diese Weise stellen Sie sicher, dass jedes Element wird diejenigen nur verarbeitet.

Beantwortet am 18/12/2018 um 11:23
quelle vom benutzer

stimmen
0

Ich will nur SubscriberA eine Nachricht senden und die Nachricht vollständig oder bis zum Timeout bis SubscriberA Prozess warten. Ich kann nicht sehen, wie die TeilnehmerB zur Abholung aus der Warteschlange eine andere Nachricht zu vermeiden, bis SubscriberA Finish

Es ist seltsam, dass man eine Architektur wie so hat. Das wird Verwendung von einem Teilnehmer zu einem Zeitpunkt machen, damit eine Flotte von Teilnehmern / Micromultiinstanz ist nicht angemessen.

Wenn es möglich ist, lass es nur eine Ihrer Microservice subscribe / abfragen, um die Warteschlange

Andernfalls werden Sie es auf eigene Faust haben. Mein Vorschlag:

  • Haben zwei Warteschlange. Einer der Warteschlange würde alle Nachrichten empfangen. Einer der Warteschlange würde die Nachricht an Ihre Abonnenten dienen. Ihr Code-Basis muss nicht viel ändern, wenn Sie Set-up ist wie folgt
  • Stellen Sie eine Lambda - Funktion ausgelöst durch Empfangen-SQS auf. Stellen Sie die Parallelität dieser Funktion auf 1, stellen Sie die Lieferverzögerung Ihrer SQS , wie Sie drosseln wollen
  • Die Funktion muß das Serving-SQS überprüfen, ob es eine Nachricht in dieser Warteschlange (Waitting oder bearbeitet wird) durch die API GetQueueAttributes
  • Die Nachricht abschicken die Serving-SQS , wenn es frei oder ist die Nachricht zurück zu Empfangen-SQS Rückkehr
Beantwortet am 19/12/2018 um 06:37
quelle vom benutzer

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