2016-10-20 2 views
0

Ich erstelle eine App, die den Inhalt einer CSV in eine Reihe von "Lesungen" analysiert. Anschließend werden diese Messwerte an einen REST-API-Server gesendet, wo sie einer Datenbank hinzugefügt werden.Einreihen von Elementen für das POST an eine REST-API

So weit so gut (und das oben genannte funktioniert). Ich bin mir jedoch bewusst, dass gelegentlich Verbindungsprobleme mit dem Server auftreten können (Verzögerungen oder wenn die API aus irgendeinem Grund ausfällt).

Um dies anzugehen, plante ich mit Sidekiq, um die Übertragung asynchron durchzuführen. Allerdings habe ich ein paar Fragen:

  • Bin ich am besten aus einem ActiveJob Schaffung der Post durchzuführen und dann nur diesen Job Warteschlangen, wenn die CSV analysiert wird? Ich nehme an, dass, wenn es ein Verbindungsproblem gibt, es schließlich in der gleichen Reihenfolge fortsetzen würde, wie sie hinzugefügt werden?

  • Muss ich Sidekiq anweisen, den Job "erneut zu versuchen", oder wird das einfach automatisch passieren?

  • Schließlich, wie Sidekiq Redis verwendet, sollte Persistenz aktivieren, so dass, wenn der App-Server abstürzt, während es Elemente in der Warteschlange gibt sie nicht verloren gehen?

Gibt es noch etwas zu beachten? Oder eine bessere Lösung?

Antwort

0

Es gibt zwei Szenarien

1) Sie werden die komplette Bearbeitung der CSV-Datei in auf Job bringen, wobei in diesem Fall denke ich, dass es nicht perfekt, wie das funktioniert, wenn der Job es wieder versagt wird Schleife über alle Zeilen. es sei denn, Sie markieren die Zeilen, indem Sie eine weitere Spalte in der CSV-Datei hinzufügen.

2) Sie fügen jede Zeile als einen separaten Job in Sidekiq hinzu, ich kann nur einen Nachteil darin sehen, dass Sie möglicherweise zu viele Jobs erstellen, falls Sie große CSV-Dateien haben, aber es wird viel sparen der Verarbeitung auf CSV-Seite.

+0

Die CSV enthält nur 1-2 Zeilen mit jeweils 15 Werten, die alle 5 Minuten ankommen. In Anbetracht dessen denke ich, dass ich einen "Post-Row" -Arbeit erstellen sollte und ihn pro Zeile statt einem "Prozess-CSV" -Auftrag behandeln sollte? –

+0

@JoeCzucha, ja ich denke das wäre der bessere Ansatz. Dieser Ansatz behandelt die fehlgeschlagenen Jobs automatisch und wird nie wieder für die erfolgreich verarbeitete Zeile ausgeführt. –

+0

Danke für die Tipps :) Müsste ich einen CRON-Job ausführen, um automatisch alle n Minuten alle Daten in der Warteschlange zu übertragen, oder würde Sidekiq automatisch die Warteschlange beim Absturz/Neustart der App fortsetzen? –

Verwandte Themen