segundo plano mail horizon example laravel-5 jobs

laravel 5 - plano - Laravel trabajos en cola procesados inmediatamente incluso con un retraso



laravel segundo plano (7)

Actualmente estoy desarrollando mi aplicación personal que trata sobre servidores privados (por ejemplo, Servidores de Minecraft) y, como la consulta al servidor lleva algún tiempo, decidí implementar trabajos en cola, sin embargo, no funcionan correctamente, se ejecutan inmediatamente cuando se los llama, aunque se retrasan, causando una latencia masiva en la solicitud de página.

Aquí está el índice de mi HomeController () que llama al trabajo para actualizar cada servidor con un retraso de 30 segundos:

public function index() { $servers = Server::all(); foreach($servers as $server) { //Job Dispatch $job = (new UpdateServer($server->id))->delay(30); $this->dispatch($job); } return view(''serverlist.index'', compact(''servers'')); }

La clase de trabajo que actualiza los servidores es la siguiente:

class UpdateServer extends Job implements SelfHandling, ShouldQueue { use InteractsWithQueue, SerializesModels; protected $id; public function __construct($id) { $this->id = $id; } public function handle(){ $server = Server::findOrFail($this->id); //preparing the packet $test = new RAGBuffer(); $test->addChar(''255''); $test->addChar(''1''); $test->addShort(1 | 8); //finding the server $serverGame = new RAGServer($server->server_ip); //Get server info $status = $serverGame->sendPacket($test); $server->onlinePlayers = $status->getOnline(); $server->peakPlayers = $status->getPeak(); $server->maxPlayers = $status->getMax(); if (!$server->save()) { //error ocurred } } }

Cada vez que se ejecuta el índice HomeController (), hay un retraso masivo en la solicitud de la página, seguí el tutorial en la página web oficial de Laravel, intenté encontrar respuestas y nada.

Entonces, ¿qué estoy haciendo mal? ¿Por qué el trabajo no se retrasa 30 segundos y luego lo hace en segundo plano en mi servidor? Gracias de antemano.

Además: el controlador () está haciendo lo que se supone que debe hacer, consulta el servidor, envía paquetes y actualiza mi base de datos con la información correcta.


Asegurarse de que

''default'' => env(''QUEUE_DRIVER'', ''database''),

en config / queue.php y

QUEUE_DRIVER=database

en el archivo .env para asegurar que se use el controlador de la base de datos


Esto me estaba volviendo loco por años antes de darme cuenta de que Laravel 5.7 cambió su nombre a QUEUE_DRIVER a QUEUE_CONNECTION en los archivos .env


Para alguien que haya realizado los cambios anteriores y aún no haya funcionado, verifique el valor predeterminado del archivo de cola como este: dd(Config::get(''queue.default''))

Para mí no cambió hasta que se vació el caché de configuración:

php artisan config:clear


Si está ejecutando en php artisan serve , reinícielo y ejecute nuevamente php artisan serve . Esto me funcionó después de horas tratando de preguntarme qué era. :)


Si está ejecutando pruebas en el servicio de cola a través de phpunit, asegúrese de que

<env name="QUEUE_DRIVER" value="X"/>

en phpunit.xml no anula el controlador de cola deseado.


para probar localmente se puede configurar el controlador para

QUEUE_DRIVER=database

y ejecute php artisan queue: table y luego php artisan migrate para que pueda guardar su cola en la base de datos de manera que pueda ver visualmente lo que está pasando ...

y para ejecutar sus colas, ejecute simplemente php artisan queue: listen .. y deje que se ejecute como lo hace con artisan serve


.env configurar el controlador de cola que desea usar en el archivo .env del directorio raíz de su proyecto.

De forma predeterminada, el controlador de la cola está sync que hace exactamente lo que usted describe, ejecutando las colas de inmediato.

Puede elegir entre algunos controladores de cola diferentes, como beanstalked o redis (que sería mi elección). Hay un excelente regalo de promoción en laracasts.com sobre la configuración de una cola hablada.

Para ver todas las opciones de controladores de cola disponibles en laravel, eche un vistazo here .

Aquí hay un ejemplo de .env

APP_ENV=local APP_DEBUG=true APP_KEY=SomeRandomString DB_HOST=localhost DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync //< put the desired driver here MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null