2017-08-24 1 views
1

Also, ich habe ein Szenario, in dem ich in regelmäßigen Abständen SignalWorkflowExecution() aufrufen eine Anforderung für Workflow-Signalisierung übergeben. Im Decider habe ich codiert, ich sehe es dann bei seiner nächsten Abfrageanforderung das Signal in der Ereignishistorie erhalten (und eine Entscheidungsaufgabe unmittelbar danach gestartet).Wie sollen Amazon SWF-Signale verarbeitet werden?

Meine Frage ist, wie verhindere ich die Verarbeitung dieses Signal ein zweites Mal? Das heißt, wenn ich das Signal bekomme, dann eine neue Aktivität zur Arbeit einreichen, wird das Signal nicht noch in der Ereignishistorie sein? Ich sehe keine Möglichkeit, das Signal mit einer nachfolgenden Entscheidungsaufgabe zu korrelieren, und es ist keine empfohlene Vorgehensweise, den Zustand in einem Decider beizubehalten, da dies die SWF sein soll.

Wird erwartet, dass der Decider auch andere Aufgabenlisten abfragt? Das heißt, wenn mein Decider ein Signal zur Ausführung von Aktion A empfängt und dann eine neue Entscheidung zur Planung von Aktivität A auf Taskliste X (wo Arbeiter für Aktion A abfragen) erstellt wird, wird erwartet, dass der Decider Taskliste X ebenfalls abfragen wird ob für die Aktion A bereits eine Aktivität geplant wurde? Ansonsten sehe ich nicht, wie man es vermeidet, Signale jedes Mal neu zu verarbeiten, wenn es ein neues Signal bekommt, alle vorherigen Signale sind in der Historie, also wie vermeide ich die erneute Verarbeitung?

Ich kann nicht viele Informationen über die Arbeit mit Signalen finden. Ich sehe nur eine Seite, und es erklärt nicht, wie man mit Signalen im Entscheider umgeht.

Ich muss nur den "richtigen" Weg kennen, Signale im Workflow zu verarbeiten.

+0

Welches clientseitige Framework und welche Sprache verwenden Sie? AWS Flow Framework kümmert sich um all diese Komplexität für Sie. –

+0

Ich verwende das C# AWS SDK. Das SDK verarbeitet keine Signale, Sie müssen nach ihnen suchen und die Ereignishistorie selbst im Entscheidungskriterium durchlaufen. SWF selbst generiert automatisch eine Entscheidungsaufgabe, wenn ein Signal empfangen wird, so dass die Entscheidungsaufgabe an den Entscheider gesendet wird. Ich verstehe nicht, was Sie darunter verstehen, weil ich die Dinge implementiert habe und sie nur Zyklen macht für immer die Signale zu erhalten und neue Aktivitätsanfragen einzureichen, ohne zu wissen, dass es schon ein bestimmtes Signal verarbeitet hat. Dies ist was die Docs sagen zu tun - verarbeiten Sie die Geschichte selbst, um die Signale zu erhalten – superqd

Antwort

0

Wenn Sie PollForDecisionTask anrufen, einer der Parameter auf der Antwort previousStartedEventId ist (Hervorhebung hinzugefügt):

Die ID des DecisionTaskStarted Ereignisses der vorhergehenden Entscheidungsaufgabe dieser Workflow-Ausführung, die durch die verarbeitet wurde Entscheider. Dies kann verwendet werden, um die Ereignisse in der Historie neu zu bestimmen, die seit der letzten Entscheidungsaufgabe, die der Entscheider empfangen hat, aufgetreten sind.

Im Allgemeinen sollte jede Entscheidungsaufgabe neue Ereignisse seit der vorherigen Entscheidungsaufgabe behandeln. Dies gilt für mehr als nur Signale - es funktioniert genauso für abgeschlossene Aktivitätsaufgaben, untergeordnete Workflows, Stornierungsanforderungen usw.

+0

Ahhhh. Ich sollte also nur Signale verarbeiten, die neuer sind als die letzte erhaltene Entscheidungsaufgabe. Das scheint praktikabel. Vielen Dank. – superqd

Verwandte Themen