Como procesar un comando
Dos pasos: definir el handler, activar el procesador de inbox.
El handler es asincrono: corre cuando el InboxCommandProcessor saca el comando del inbox, no cuando el comando se envia. 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 CommandHandler<C> y se anota con @CommandMapping indicando el tipo de comando que procesa. Por convencion el handler vive bajo {dominio}/adapter/in/listener/:
package com.example.task.adapter.in.listener;
import com.example.commons.messaging.command.Command;
import com.example.commons.port.in.CommandHandler;
import com.example.commons.port.in.CommandMapping;
import com.example.task.usecase.ArchiveTaskCommand;
@CommandMapping("com.example.task.usecase.ArchiveTaskCommand")
class ArchiveTaskCommandHandler implements CommandHandler<ArchiveTaskCommand> {
@Override
public void handle(Command<ArchiveTaskCommand> command) {
// tu logica aqui
}
}
El valor de @CommandMapping 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 comando. Si registras dos |
2. Activar el procesador de inbox
El procesador que invoca el handler viene apagado por default. Habilitalo en application.yaml:
app:
commands:
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 comando (ver Enviar un comando) y esperar un tick del processor, curl http://localhost:8080/actuator/message-boxes muestra commands.inbox.completed incrementado.
Ver tambien
-
Enviar un comando — del otro lado: como emitir el comando.
-
Referencia: Mensajeria — contrato de
CommandHandler,@CommandMapping, estados de mensaje. -
Decisiones de mensajeria — por que comandos van dirigidos y eventos son broadcast.