Ich habe eine Erinnerung Typ App, die Aufgaben in Sellerie mit dem "Eta" -Argument geplant. Wenn sich die Parameter im Erinnerungsobjekt ändern (z. B. Zeitpunkt der Erinnerung), widerrufe ich die zuvor gesendete Aufgabe und stelle eine neue Aufgabe in eine Warteschlange., wie widerrufen Aufgaben in über mehrere selleryd Prozesse
Ich habe mich gefragt, ob es eine gute Möglichkeit gibt, die widerrufenen Aufgaben über Neustarts von selleryd nachzuverfolgen. Ich würde gerne die Möglichkeit haben, sellerydische Prozesse im laufenden Betrieb hoch/runter zu skalieren, und es scheint, dass alle selleryd-Prozesse, die nach dem Senden des revoke-Befehls gestartet wurden, diese Aufgabe immer noch ausführen.
Eine Möglichkeit besteht darin, eine Liste von widerrufenen Aufgaben-IDs zu führen, aber diese Methode führt dazu, dass die Liste willkürlich wächst. Das Löschen dieser Liste erfordert, dass die Task nicht mehr in der RabbitMQ-Warteschlange vorhanden ist, was nicht möglich zu sein scheint.
Ich habe auch versucht, eine gemeinsame --statedb-Datei für jeden der selleryd Arbeiter zu verwenden, aber es scheint, dass die angegebene b-Datei nur bei Beendigung der Arbeiter aktualisiert wird und somit nicht geeignet für das, was ich erreichen möchte.
Vielen Dank im Voraus!
würde dieses noch theoretisch erfordern, dass ich alle vorherigen Task-Ergebnisse in der Datenbank behalten, da jede Beschneidung zu einem Verlust der Garantie führen würde, die neu Arbeitsprozesse neu gestartet Führen Sie keine zuvor widerrufenen Aufgaben aus. –
Ich gehe davon aus, dass Sie bereits eine Art Datenbankmodell eingerichtet haben, mit dem Sie auch die Task-ID speichern, damit Sie die Aufgabe bei Bedarf widerrufen können. Wenn dies der Fall ist, können Sie diesem Modell einfach eine "completed" -Flag hinzufügen. –
Eine Alternative, die ich gerade entwickelt habe: Behalte eine Liste von revoke-Aufgaben-IDs, und jedes Mal, nachdem ein selleryd-Prozess hochgespielt oder neu gestartet wurde, durchläuft ein Skript die gesamte Liste und sendet die recode-Befehle erneut. Auf diese Weise müssen wir nur die Aufgaben-IDs behalten, die seit dem letzten Skriptlauf gesperrt wurden. Kannst du irgendwelche Fehler in dieser Implementierung sehen? –