Java é lindo. Quarkus é lindo. [Franz] Kafka é lindo. Porém, nem tudo são flores no desenvolvimento. Acidentes acontecem e é importante conseguirmos nos preparar para eles. Hoje, nós vamos ver sobre os diferentes tipos de tratamento de exceção durante o consumo de uma mensagem Kafka pelo Quarkus.
Já vou assumir que você sabe o que é o Kafka, já manja um pouco de Quarkus e tem tudo configurado. Caso não seja o seu caso, tenho um artigo infinitop para ajudar.
O Quarkus possui 3 formas diferentes para tratar uma exceção quando no método com a anotação @Incoming: Parar de consumir mensagens, ignorar e DLQ (dead-letter queue).
Parar de consumir mensagens
Esse é o tratamento padrão. O serviço continuará funcionando normalmente. Porém, as mensagens não serão mais consumidas até que alguém intervenha na mensagem, resolva o que precisar ser resolvido e então reinicie o serviço.
Caso nada tenha sido configurado, será utilizado essa opção.
Ignorar
Nesse modo, caso ocorra alguma exceção, o Quarkus diz pro Kafka que conseguiu consumir corretamente a mensagem e finge que o erro nunca existiu.
Para configurar é muito simples. Basta adicionar o seguinte trecho no application.properties:
mp.messaging.incoming.<nome do canal>.failure-strategy=ignore
Enter fullscreen mode Exit fullscreen mode
Dead-letter queue
Nesse modo, quando ocorre uma exceção, o Quarkus ainda irá informar ao Kafka que a mensagem foi consumida, porém, irá enviar a mensagem para uma fila especial onde essas mensagens poderão ser consumidas num momento oportuno.
Essa é a configuração que tem mais opções, mas é bem simples de entender:
mp.messaging.incoming.<nome do canal>.failure-strategy=dead-letter-queue
mp.messaging.incoming.<nome do canal>.dead-letter-queue.topic=<nome do tópico de DLQ>
mp.messaging.incoming.<nome do canal>.dead-letter-queue.key.serializer=<caminho para o serializador da chave>
mp.messaging.incoming.<nome do canal>.dead-letter-queue.value.serializer=<caminho para o serializador do valor da mensagem>
Enter fullscreen mode Exit fullscreen mode
Por padrão, o nome do tópico será o “dead-letter-topic-” + nome do canal. Além disso, o Quarkus tentará supor o caminho para o serializador. É possível seguir o palpite dele, ou configurar manualmente. O destino está nas suas mãos.
Uma outra observação importante é que, se o tópico de DLQ não existe, então o Quarkus irá criar um novo tópico com as configurações padrões do Kafka (o que pode não ser a melhor abordagem possível).
Considerações finais
Esse é um assunto bem interessante e que eu queria ter colocado lá no outro post. Porém, achei que ficaria muita coisa.
Foi estranho fazer um post sem código, mas espero que tenham gostado!
暂无评论内容