Muchas veces necesitamos crear procesos transparentes a los ojos de los usuarios pero complejos de procesar: procesamiento de vídeo, procesos en cascada, envío de múltiples correos electrónicos.
Para solucionar estas necesidades en el mundo del desarrollo web lo mejor sin duda es gestionar estos procesos a través de colas que se ejecuten en background.
Laravel por defecto nos ofrece un sistema de colas (queues), pero se ejecutan de forma síncrona, es decir, todo pasa a ojos del usuario. Por suerte, tenemos muchas formas de configurar el sistema de colas en Laravel para que pasen a segundo plano, las más populares sin duda son database y redis.
Laravel Horizon es mi opción preferida, más aún cuando trabajo con Laravel Forge, ya que todo queda configurado sin tener que hacer absolutamente nada.
En este tutorial vamos a cubrir un ejemplo sencillo pero que estoy seguro te ayudará a entender cómo funciona Laravel Horizon para gestionar colas en Laravel haciendo uso de Redis. La idea es realizar el envío de correos electrónicos a través de notificaciones a los usuarios de nuestra plataforma cuando se registren para dar la bienvenida.
Instalar y configurar Laravel Horizon
composer require laravel/horizon
php artisan horizon:installToda la configuración publicada con el comando horizon:install cae en el archivo config/horizon.php, desde ahí podemos configurar todo lo que necesitemos.
Generando usuarios y notificación
Ahora vamos a crear 20 usuarios con nuestro DatabaseSeeder o utilizando Tinker y una notificación que se ejecute utilizando las colas de Laravel.
<?php
\App\Models\User::factory(20)->create();HelloUser.php
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class HelloUser extends Notification implements ShouldQueue // <--- importante
{
use Queueable;
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject("Hello User")
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
}command.sh
php artisan make:notification HelloUserConfigurar Redis en Laravel con Predis
En este punto, deberás tener instalador Redis en tu equipo, de otra forma, este sistema no funcionará. Una vez hecho, vamos a actualizar nuestro .env con lo siguiente:
# utilizamos redis para gestionar las colas
QUEUE_CONNECTION=redis
# más variables
# el cliente de redis utilizado será predis
REDIS_CLIENT=predisPara que Predis funcione, deberemos instalarlo en nuestro proyecto:
composer require predis/predisLaravel Horizon Dashboard
Una de las mejores cosas de Laravel Horizon si nos ponemos superficiales es su Dashboard. Puedes acceder a él desde /horizon, configurable desde el archivo de configuración de Horizon. Ahí tenemos toda la información del sistema de colas con Redis gestionadas por Horizon.
Envío masivo de correos utilizando colas en Laravel con Redis
Ahora que lo tenemos todo listo, vamos a crear una ruta que envíe 20 correos electrónicos a 20 usuarios.
<?php
use App\Models\User;
use App\Notifications\HelloUser;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
User::get()->each->notify(new HelloUser);
});Si ejecutas la ruta anterior (asegúrate de configurar tu servidor de correos electrónicos) verás que el proceso se ejecuta en 1 o 2 segundos, pero además, verás que ningún correo se ha enviado a sus destinatarios. En su lugar, han quedado almacenados en las colas de Laravel Horizon con Redis.
Para poner en marcha Laravel Horizon sólo debemos abrir un terminal y ejecutar el siguiente comando:
php artisan horizonA partir de ese momento, todos tus correos se empezarán a enviar y los nuevos procesos basados en colas con Redis que se vayan generando se irán procesando de forma automática.
Asegurando el Dashboard de Laravel Horizon
No desearás que cualquiera pueda acceder al Dashboard de Laravel Horizon. Para solucionar este inconveniente, Laravel nos ofrece el service provider HorizonServiceProvider, a través del método gate podremos permitir acceso a los correos que deseemos dentro de nuestro sitio.
<?php
protected function gate()
{
Gate::define('viewHorizon', function ($user) {
return in_array($user->email, [
'[email protected]',
]);
});
}
Curso Laravel 12
Completo 2026
El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.
star Incluido en cualquier suscripción