TJF + Mensageria: Simplificando o envio de mensagens
Este artigo dá início ao detalhamento das bibliotecas do TOTVS Java Framework, apresentadas no artigo Desenvolvendo aplicações cloud-native com Java — parte 3. Nele, abordaremos a utilização da biblioteca tjf-messaging-stream.
TJF Messaging Stream
Esta biblioteca provê suporte de mensageria no modelo de Publish/Subscribe, utilizando como base o Spring Cloud Stream, além de possuir suporte nativo ao tratamento global de exceções e recursos de multi-tenancy.
Mecanismos Homologados
Ao utilizar o Spring Cloud Stream, temos suporte a vários mecanismos de mensageria (message brokers), entretanto o TJF homologa a utilização dos mecanismos RabbitMQ, Apache Kafka e ActiveMQ.
Exemplo de Mensageria
Neste exemplo vamos utilizar o broker RabbitMQ, porém o TJF possui um repositório de exemplos no GitHub, onde podemos verificar como implementar mensageria com Kafka e o ActiveMQ.
Nosso repositório TJF-Samples tem como princípio ser colaborativo, dessa forma sinta-se a vontade para submeter um pull request ou sugestões, assim juntos poderemos desenvolver exemplos ricos e explicativos para todos.
Antes de iniciarmos o exemplo, será necessário subir um container RabbitMQ. Para isso, basta utilizar o comando abaixo:
docker run -d -p 5672:5672 -p 15672:15672 --name container_rabbitmq rabbitmq:3.8.3-management
Caso não possua o docker instalado, acesse a documentação de instalação do mesmo.
Para a construção do exemplo será necessário possuir um projeto Java que utilize o framework TJF como parent. Para isso, siga os passos da documentação Começando com o TJF em nosso portal.
O framework TJF é um projeto inner-source, e está disponível, por enquanto, para colaboradores e parceiros da TOTVS.
Com o projeto em mãos podemos iniciar a utilização de mensageria. Dessa forma, basta declarar a dependência da biblioteca tjf-messaging-stream.
<dependency>
<groupId>com.totvs.tjf</groupId>
<artifactId>tjf-messaging-stream</artifactId>
</dependency>
Após declarar a dependência vamos configurar as filas de mensageria para o projeto.
Observe que apenas com estas configurações o projeto possui as filas de mensageria e filas para o tratamento de exceções. Assim, ocorrendo uma exceção no envio da mensagem, a mesma será enviada para as filas de exceções. Executando a requisição http://servidor:porta/actuator/messaging as mensagens que geraram exceções serão reprocessadas.
Tendo as configurações finalizadas, precisamos criar a estrutura de envio de mensagens do projeto. Primeiro, iremos criar o exchange.
Com o exchange criado, podemos criar o publisher de mensagens. Neste, utilizaremos o conceito de TOTVSMessage.
Apenas com estas duas classes já é possível publicar mensagens utilizando o TJF. A publicação da mensagem será realizada a partir de uma chamada GET. Ao executar o método GET, é possível ver a criação dos exchanges e das filas de mensageria no RabbitMQ.
Agora vamos capturar as mensagens enviadas. Para isso, criaremos o subscriber da aplicação.
Por utilizarmos o conceito de TOTVSMessage, teremos acesso de forma simplificada aos atributos do evento e ao header da mensagem enviada.
Finalizando
Neste artigo apresentamos um projeto com a biblioteca tjf-messaging-stream, que possibilita o uso do modelo publish/subscribe de mensageria. O código fonte do projeto está no nosso repositório github.
Fique ligado que novos artigos sobre os componentes do TJF virão em breve.