2013-05-09 3 views
5

Es wird in der Sturmdokumentation erwähnt, dass der Sturm das Tupel wiederholt, dessen Verarbeitung abgelaufen ist. Meine Frage ist, ob der Sturm dies automatisch tut (ohne fail() auf dem Ursprungsauslauf) oder ob es eher die Verantwortung des Ursprungsauslaufs ist, das Tupel wiederzugeben (der fail() wird aufgerufen und die Wiederholung sollte innerhalb oder sogar irgendwo extern implementiert werden)Gibt es ein Sturmwiederholungstupel, dessen Verarbeitung abgelaufen ist?

Antwort

6

Um bei einem Timeout eine ordnungsgemäße Wiedergabe zu erhalten, müssen Sie das Tupel mit einer ID verankern, wenn Sie es aus dem Auslauf ausstoßen. Wenn das Zeitlimit auftritt, wird alles, was Sie als Anker verwendet haben, an die fail-Methode zurückgegeben (fail (object anchorId)). Jetzt können Sie die anchorId des failed/timedout Tupel zur Wiederholung verwenden oder etwas anderes, was Sie mit dem Timeout-Tupel machen wollen. Jede Anker-ID muss eindeutig sein. Ein Beispiel für eine Anker-ID ist eine Datenbank-ID. Wenn das Tupel fehlschlägt, können Sie die Datenbank-ID verwenden, um Ihr Tupel neu zu erstellen und erneut zu emittieren. Um Ihre Frage zu beantworten, müssen Sie Ihre Replay-Logik innerhalb des Fehlers haben und Sie können die AnchorId verwenden, um Ihr Tupel neu zu erstellen. Hoffe, diese Info hilft

+0

Gibt es eine Möglichkeit zu wissen, welche Schraube in der Fail() Methode des Spout fehlgeschlagen ist? Grundsätzlich möchte ich bolt-spezifische Informationen im Tupel senden, während ack() oder fail(). Wie kann das gemacht werden? –

Verwandte Themen