2 visitas

Laravel y Event-Driven: cómo integrar eventos entre microservicios con Redis

Aprendé a implementar comunicación asíncrona entre microservicios Laravel usando Redis como broker de eventos.

Laravel ofrece herramientas que hacen muy fácil implementar una arquitectura orientada a eventos. Podemos usar Redis como message broker liviano para comunicar microservicios sin depender de Kafka o RabbitMQ.

Escenario real: sincronización de usuarios

Imaginá dos servicios:

  • ServicioUsuarios (administra altas y bajas)
  • ServicioCRM (gestiona contactos comerciales)

Queremos que cuando un usuario se crea en el primero, el segundo lo sincronice automáticamente.

Publicar el evento

En el ServicioUsuarios, definimos un evento de dominio:

// app/Events/UserCreated.php
namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;

final class UserCreated
{
    use Dispatchable;

    public function __construct(public readonly User $user) {}
}

Luego, en el controlador que registra usuarios:

$user = User::create($request->validated());
event(new UserCreated($user));

Y creamos un listener que publique el evento en Redis:

// app/Listeners/PublishUserCreated.php
use Illuminate\Support\Facades\Redis;

public function handle(UserCreated $event): void
{
    Redis::publish('eventos_usuarios', json_encode([
        'tipo' => 'usuario.creado',
        'datos' => $event->user->only(['id', 'nombre', 'email']),
    ]));
}

Escuchar el evento en otro microservicio

En el ServicioCRM, podemos ejecutar un worker que escuche el canal Redis:

use Illuminate\Support\Facades\Redis;

Redis::subscribe(['eventos_usuarios'], function (string $mensaje) {
    $evento = json_decode($mensaje, true);

    if ($evento['tipo'] === 'usuario.creado') {
        Contacto::create($evento['datos']);
    }
});

Así, ambos servicios están desacoplados y comunican cambios en tiempo real.

Beneficios

  • No hay llamadas HTTP directas
  • Redis es rápido y fácil de configurar
  • Laravel provee soporte nativo

Ideal para proyectos medianos donde se necesita performance sin complejidad extra.

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer