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 @CommandMapping con el mismo value, el ultimo gana y el primero queda inactivo (con un warning al startup).

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