2016-06-26 17 views
1

Zur Zeit habe ich folgende Einrichtung, eine Route, die eine Funktion in meinem Controller aufruft, die wiederum einen Job in die Warteschlange stellt.Antwort auf Warteschlangenaufträge Laravel 5.2

// Meine Strecke

Route::get('/testJob', '[email protected]');

// My-Controller

public function testJob() 
{ 
    $job = (new testJob())->delay(5); 
    $this->dispatch($job); 
} 

// Mein Job

public function handle() 
{ 
    require 'testAPICall.php'; 
    // echo $response; 
    return $response; 
} 

//testAPICall.php

$response = 'this is the response'; 

// Queue Nach

Queue::after(function (JobProcessed $event) { 
    echo var_dump($event->data); 
}); 

Was ich tun können, möchte, ist die Antwort, die der Jobs in der Warteschlange zurück zugreifen :: nach oder alternativ einen Rückruf in die Warteschlange übergeben werden Ausführen nach dem Job, erneut mit Zugriff auf die Antwort aus dem Job.

Ist das etwas, das mit Laravel Queues möglich ist, und wenn ja, wie würde ich darüber gehen?

Prost, Jack.

+0

nicht kommentieren auf Ihre Frage, aber Sie sollten PHP-Dateien nicht benötigen, wie Sie es taten, erstellen Sie Klassen für die gleichen (nur zu sagen) –

Antwort

1

Warteschlange :: after() ist ein globaler Rückruf, der nach jedem Job ausgeführt wird. Also vielleicht nicht das, was du willst. In Ihrem Fall wäre ich davon abhängig, dass Ereignisse/Listener nach Beendigung des Jobs ausgelöst werden.

public function handle(Mailer $mailer) 
{ 
    //Your code 
    event(new JobDone($data)); 
} 

Bitte lassen Sie mich wissen, wenn Sie weitere Details für die Implementierung benötigen.

+0

Danke dafür, mit Ereignissen konnte ich das Problem zur Hand lösen –

+0

froh zu hören, das ist großartig. –

0

Ich habe so etwas wie Ihr getan, die eine Nachricht „queue.txt“ in Laravel 5 „app“ -Ordner

log

Dieser Code, den ich von einem YouTube-Video haben und meinen Code nicht, aber ich habe es getestet erfolgreich

Das erste, was Sie in "routes.php" zu codieren haben, wie unten

Route::get('/',function() 
{ 
    //$queue = Queue::push('LogMessage',array('message'=>'Time: '.time())); 
    $queue = Queue::later(20,'LogMessage',array('message'=>'Time: '.time())); 
    return $queue; 
}); 

class LogMessage{ 
    public function fire($job,$data){ 
    File::append(app_path().'/queue.txt',$data['message'].PHP_EOL); 
    $job->delete(); 
    } 
} 

Dann können Sie Ihre Projektordner laufen mit "php -S localhost: 8888 -t public"

zugleich müssen Sie ein weiteres Terminalfenster, in Windows oder Linux-Umgebung öffnen und wies auf denselben Ordner und geben Sie den Befehl „php Handwerkers Warteschlange: hören“

Ich denke, dies für Sie hilfreich sein!

+0

Hallo Danke für Ihre Antwort. War nicht wirklich, was ich suchte, aber andere könnten es nützlich finden. –

+0

@JackDavies Danke! – kaviranga