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.
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.
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']),
]));
}
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.
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.