Usamos o Quarkus Messaging (com a extensão "smallrye-jms" para conectar ao IBM MQ) com um conversor para transformar as mensagens recebidas em strings em um objeto Java.
Ao receber uma mensagem de entrada na "fila_A", devemos produzir uma mensagem em um dos 2 destinos a seguir:
- "queue_A_error": se um problema for encontrado durante a conversão da mensagem de entrada. A nova mensagem a ser produzida neste destino é uma mensagem cujo payload é uma string no formato JSON (contendo o payload original, bem como a lista de todos os erros encontrados).
- "queue_B": com uma mensagem contendo o objeto original serializado em JSON
Como podemos implementar esse caso de uso de tratamento de erros com o Quarkus Messaging?
Você poderia fazer algo assim:
Observe que não testei esse código e espero que ele ajude você.
Editar: @JYC, vejo que também é possível interceptar mensagens recebidas, veja este link: https://smallrye.io/smallrye-reactive-messaging/4.25.0/concepts/decorators/#incominginterceptor
Isso pode ser útil se você quiser implementar globalmente o tratamento de erros.
Edição 2: outra opção é configurar um DLQ:
mp.messaging.incoming.your-channel-name.dead-letter-queue=your-dead-letter-queue-name
Você também pode verificar as
Targeted
mensagens com múltiplos canais de saída. Você precisaria fazer o tratamento de erros com try-catch dentro do método de entrada.