Listeners a jobs con JobQueue en Laravel
Clase 16 de 33 • Curso Avanzado de Laravel
Contenido del curso
Entorno de trabajo y repaso de Laravel
Manejo de tu base de datos con Laravel
La terminal de Laravel
Eventos y tareas de Laravel
Manejo de errores
El corazón de Laravel
Creación de paquetes
- 26

Cómo crear paquetes Laravel con Composer
08:51 min - 27
Propiedades para manejo de dependencias
02:02 min - 28
Comprende el archivo composer.json
02:23 min - 29

Cómo Composer carga clases automáticamente
04:18 min - 30

Crear mis propios Services Providers
08:58 min - 31

Cómo publicar archivos con Service Provider
04:12 min - 32

Instalando paquetes desde GitHub con Composer
10:35 min - 33

Publicar tu paquete PHP en Packages
03:12 min
Optimiza procesos en segundo plano con queues de Laravel: convierte tus listeners en jobs para respuestas inmediatas y tareas diferidas. Aquí verás cómo encolar listeners con una sola interfaz, verificar la tabla jobs y crear un job que actualiza el last login al autenticarse.
¿Cómo convertir listeners en jobs en Laravel?
Transformar un listener en job es directo: basta con implementar la interfaz JobQueue en el listener. Así, cada vez que el evento se dispare, el listener se ejecuta en segundo plano como job, mientras la API responde de forma inmediata.
- Implementa la interfaz en tus listeners:
implements JobQueue. - Dispara la petición desde un cliente HTTP y observa una respuesta inmediata.
- Revisa la tabla jobs: el trabajo queda encolado en segundo plano.
- Ejecuta el worker:
php artisan queue:workpara procesarlo automáticamente.
¿Qué beneficios aporta esta cola de trabajo?
- Menor latencia percibida por el usuario final.
- Tareas costosas se ejecutan en segundo plano.
- Escalabilidad al separar respuesta HTTP y procesamiento.
¿Qué conceptos y habilidades aplicas aquí?
- Listener: responde a eventos del dominio y ahora se ejecuta como job.
- JobQueue: interfaz que indica a Laravel encolar el listener como job.
- queue:work: comando que procesa los jobs pendientes.
- Tabla jobs: registro de trabajos en espera o ejecutados.
¿Cómo implementar el reto del last login con un job?
El objetivo: agregar una columna last login a usuarios y actualizarla con la fecha actual cada vez que la persona inicia sesión. Se usa el evento de login provisto por el framework, un job dedicado y Carbon para manejar la fecha.
¿Cómo crear la migración para last login?
- Agrega la columna tipo timestamp en la tabla de usuarios.
// database/migrations/XXXX_XX_XX_add_last_login_to_users_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->timestamp('last_login')->nullable();
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('last_login');
});
}
};
- Ejecuta la migración desde la terminal y verifica el cambio.
¿Cómo crear el job que actualiza last login?
- Genera el job y define la lógica en
handlepara recibir el evento de login. - Obtén el usuario con
event->user, asigna la fecha actual y persiste.
// app/Jobs/UpdateLastLogin.php
namespace App\Jobs;
use Carbon\Carbon;
use Illuminate\Auth\Events\Login;
class UpdateLastLogin implements JobQueue
{
public function handle(Login $event): void
{
$user = $event->user;
$user->last_login = Carbon::now();
$user->save();
}
}
¿Cómo escuchar el evento de login y disparar el job?
- Registra en el Event Service Provider que, al ocurrir Login, se ejecute el job.
// app/Providers/EventServiceProvider.php
use Illuminate\Auth\Events\Login;
use App\Jobs\UpdateLastLogin;
protected $listen = [
Login::class => [
UpdateLastLogin::class,
],
];
- Prueba: inicia sesión. Se crea un registro en la tabla jobs.
- Procesa con
php artisan queue:worky valida en la tabla users que last_login tenga la fecha actual.
¿Qué probar con drivers y monitoreo de queues?
Para afianzar el manejo de queues, experimenta con distintos drivers que ofrece Laravel para jobs y queues. Próximamente, usando el driver de Redis en máquina virtual, se mostrará la herramienta de monitoreo Laravel Horizon para observar y gestionar los trabajos en tiempo real.
¿Te quedó alguna duda o quieres compartir tu implementación? Deja tu comentario y cuéntanos cómo te fue con el job de last login y la ejecución en segundo plano.