Ich habe einen Sidekiq-Worker, der eine Verbindung zu einer Remote-ODBC-Datenbank herstellt, die Daten abruft und dann die lokale Datenbank aktualisiert. Jetzt spalte ich den Arbeiter in zwei Arbeiter. Einer wird verbinden und holen Sie die Daten und ein anderer wird die Datensätze aktualisieren.Sidekiq: übergeben Sie ein Objekt als Parameter
Die Verbindung gibt ein Objekt #<OCI8::Cursor:0x00000007703f30>
zurück, das ich Parameter an den zweiten Arbeiter übergebe.
SecondWorker.perform_async({:odbc => connection})
Im zweiten Arbeiter habe ich versucht, es zu benutzen:
def perform(options)
order_odbc = options['odbc']
end
Aber es behandelt das Objekt als String
"#<OCI8::Cursor:0x00000006bddf48>":String
Gibt es eine andere Möglichkeit, die Objekte in Parameter zu übergeben?
Danke. Das Ziel besteht darin, die Arbeitslast des ersten Arbeiters zu minimieren, wenn er sich zum ersten Mal mit dem Server verbindet, die Daten abruft und dann die Datensätze aktualisiert. Also dachte ich mir, einen neuen Arbeiter zu beginnen. – Arif
Da Sie die andere Methode (d. H. Den Code, der den "zweiten Worker" darstellen würde) als asynchrone Methode starten würden, wird der Worker selbst freigegeben. Ich bin mir nicht sicher - aber vielleicht falsch - dass Sie irgendwelche "Gewinne" bekommen würden, wenn Sie diesen Code in einen zweiten Arbeiter umwandeln würden. Durch Verwendung des asynchronen "Verzögerungs" -Aufrufs bewegt sich der Arbeiter weiter usw. –