2017-07-03 1 views
1

Ich werde dies vorwegnehmen, indem ich leichten Schlafentzug zugebe.Laravel Queue Worker, RabbitMQ und laufende Jobs remote generiert

Der Aufbau ist wie folgt:

API Endpoint (Server A) einen eingehenden Anruf empfängt, und fügt diese zu einer bestimmten Warteschlange auf dem RabbitMQ Server (Server B).

RabbitMQ (Server B) ist einfach ein RabbitMQ-Warteschlangenserver. Nicht mehr, nicht weniger.

Laravel-Installation (Server C) ist unsere aktuelle Laravel-Installation, die Jobs in bestimmten Warteschlangen suchen und mit ihnen arbeiten soll.

Wir haben ein RabbitMQ-Paket in der Laravel-Installation, das die Verwendung der regulären Laravel Queue-Mechanik über eine RabbitMQ-Verbindung ermöglicht. Das Problem, das mir begegnet ist, dass wir einen Arbeiter für eine Warteschlange spawnen können - aber da wir die Jobs nicht erzeugen, die eine $job Klasse übergeben (der Job-Inhalt selbst ist meistens ein JSON-Array), der Laravel installieren hat keine Ahnung, was man mit dem Job machen soll.

Meine Frage dreht sich hauptsächlich darum, wie man sich einem solchen Szenario nähert. Ich denke, dass die Verwendung der Queue-Funktionalität in Laravel nicht das macht, was ich tun muss. Kannst du einen Ansatz sehen, den ich vermisse? Muss ich wirklich einen Daemon auf einem Nicht-Framework-Skript erstellen, um damit umzugehen?

Ihre Eingabe wird sehr geschätzt!

+0

Gibt es keine Möglichkeit, dass Sie in JSON-Array suchen und Sinn dessen, was der Job ist oder sein kann, dann bereiten Sie es in Laravel, um das zu tun? –

+0

@FarrukhSubhani Das Problem ist, dass der Warteschlangenarbeiter in Laravel einen Job ausführt, der auf dem angegebenen $ -Auftrag (einem Skript) basiert, der genau umgekehrt ist, da der $ -Auftrag vom Server nicht verfügbar ist Erstellen Sie den Job für den Anfang. – CmdrSharp

+1

Wenn Sie darüber nachdenken, ist es vielleicht die beste Option, Server A auch eine einfachere Laravel-Installation mit einer Kopie des gleichen Jobs ausführen zu lassen. Es wäre dann in der Lage, diesen Job zu versenden, und da eine gleiche Kopie auf dem Server existiert, auf dem es läuft, sollte es funktionieren. Nicht ein Fan von dieser Idee, obwohl es mein Design übermäßig kompliziert - wenn jemand eine bessere Idee hat, bin ich ganz Ohr! – CmdrSharp

Antwort

1

Die Lösung besteht in der Tat darin, den Jobcode auf denjenigen zu replizieren, der den Job ausgibt. Der Code benötigt nicht jede Abhängigkeit, die der Job benötigt, um tatsächlich zu funktionieren, da er den Job nur von demjenigen serialisiert, der ihn betätigt.

Verwandte Themen