Como procesar un evento de dominio
Dos pasos: definir el handler, activar el procesador de inbox.
El handler es asincrono: corre cuando el InboxEventsProcessor saca el evento del inbox, no cuando el evento se publica. Y solo corre una vez por mensaje aunque el broker reentregue — la dedup por id del inbox absorbe redeliveries antes de llegar al handler.
1. Definir el handler
Una clase que implementa DomainEventHandler<E> y se anota con @EventHandler indicando el tipo de evento que procesa. Por convencion el handler vive bajo {dominio}/adapter/in/listener/:
package com.example.task.adapter.in.listener;
import com.example.commons.messaging.event.DomainEvent;
import com.example.commons.port.in.DomainEventHandler;
import com.example.commons.port.in.EventHandler;
import com.example.events.task.TaskCreatedEvent;
@EventHandler("com.example.events.task.TaskCreatedEvent")
class TaskEventHandler implements DomainEventHandler<TaskCreatedEvent> {
@Override
public void handle(DomainEvent<TaskCreatedEvent> event) {
// tu logica aqui
}
}
El valor de @EventHandler debe ser el nombre canonico (FQN) de la clase del payload — es la clave por la que el registry resuelve el handler. Si no coincide, el handler no se invoca.
|
Un solo handler por tipo de evento. Si registras dos |
2. Activar el procesador de inbox
El procesador que invoca el handler viene apagado por default. Habilitalo en application.yaml:
app:
events:
inbox-processor:
enabled: true
Para los demas parametros (polling-interval, batch-size, max-retries) y sus defaults ver Referencia: propiedades de mensajeria.
Manejo de errores
Si handle(…) lanza una excepcion, el inbox processor incrementa retryCount y vuelve el mensaje a PENDING. Tras max-retries queda en FAILED (estado terminal — no se reintenta). Para inspeccionar mensajes en FAILED ver Inspeccionar las bandejas de mensajeria.
Verificar que se invoco
Despues de emitir el evento (ver Publicar un evento de dominio) y esperar un tick del processor, curl http://localhost:8080/actuator/message-boxes muestra events.inbox.completed incrementado.
Ver tambien
-
Publicar un evento de dominio — del otro lado: como emitir el evento.
-
Referencia: Mensajeria — contrato de
DomainEventHandler,@EventHandler, estados de mensaje. -
Decisiones de mensajeria — por que outbox/inbox y cuales son las garantias de entrega.