DevSecOps

26 mar, 2018

Solução de mensageria não é um bicho de 7 cabeças

Publicidade

Você já ouviu falar de MOM?

Message oriented middleware (MOM) é um servidor de aplicação (infra-estrutura de software + hardware), idealizado exclusivamente para suportar o envio e recebimento de mensagens entre sistemas distribuídos. É um serviço utilizado para intermediar a troca de mensagens entre sistemas, com o objetivo de fazer integração de serviços.

Para quê serve um MOM?

Serve para dar solução robusta e confiável na integração entre duas ou mais diferentes soluções. Integrar sistemas hoje é um desafio imenso, diferentes plataformas, diferentes tecnologías, diferentes protocolos, diferentes mecanismos de persistências, assim, se faz necessário garantir serviços dentro da solução de integração como, por exemplo: desacoplamento, entrega de mensagem, persistência de mensagem, políticas de retry, processamento assíncrono, escalabilidade, confiabilidade, transação, interrupções, segurança, clusterização e etc. Um MOM já faz tudo isso e muito mais.

MOM é para ser utilizado em soluções de grande porte?

Esse é justamente meu ponto: você lendo tal definição, tem a falsa impressão que só usaria um MOM para fazer coisas gigantescas e exorbitantes, mas depois de conhecer o Apache ActiveMQ e o Spring JMS, você verá que é muito fácil e pode usar para fazer coisas pequenas também. Como diria um amigo meu, “só na manteiguinha“.

Você já ouviu falar de ActiveMQ?

ActiveMQ é uma implementação de um middleware completo (MOM), open source e grátis. Ele possui todas as grandes features necessárias para dar solução em coisas de “grande porte”, mas o que o pessoal desconhece é que ele tem um arquitetura tão flexível e é tão bem feito que oferece diversas opções de uso e configurações flexíveis.

Umas delas é usar o serviço de MOM de forma “embarcada”, dentro da sua própria instância da JVM e da solução, não precisando criar um servidor remoto exclusivo para isso. Juntamente com isso, você desabilita as chamadas remotas e questões de persistência, e assim, acaba ficando com um mini-serviço de MOM simples, local com suporte a filas (Queue) e tópicos (Topics) que são justamente a “cereja de bolo” desse tipo de serviço.

Você já ouviu falar de Spring JMS?

Spring JMS é um kit de desenvolvimento arquitetural que faz parte do framework spring criado exclusivamente para se trabalhar com integração de sistemas usando MOM. Esse produto abstrai toda a infra-estrutura de código utilizada para programar esse tipo de solução, criando uma faca de de serviços rápida, produtiva e fácil de usar, retirando a necessidade de fazer código sujo e infraestrutural (boilepart) necessário para configurar, enviar e consumir mensagens de um MOM.

Vamos fazer um exemplo prático?

Segue abaixo um exemplo real dessa simples e robusta solução:

Ferramentas

  • Maven
  • Eclipse Java EE IDE for Web Developers – Versão Neon.1
  • Groovy-Eclipse plugin

Projeto

Passos resumidos do projeto:

Crie um projeto Java Maven: New project -> Maven Project. Adicione groovy no projeto: botão direto no projeto -> configure -> Convert to groovy project. Configure o pom para baixar as dependências básicas: groovy, spring, cdi e activemq:

Configurar o spring.xml, subindo o activemq local, sem persistência, sem jmx e sem chamada remota. Configurar uma fila simples e um listener de fila. Configuramos também um jmsTemplate que é a faca de de serviços spring que escondem o código sujo de MOM e JMS.

Bean que envia a mensagem da fila:

Bean que consome as mensagens da fila:

Fazer uma classe simples com main para testar o envio e o consumo da mensagem:

Execute a solução, e teremos a saída:

E assim, com menos de 5 minutos, e poucas linhas de código você consegue embarcar e reusar um MOM completo fazendo filas, tópicos, sem persistência, sem chamada remota, sem gastar muita memoria, rápido, fácil e sem perder tempo fazendo na unha qualquer coisa do tipo. Sem contar que você pode evoluir mais esse produto, habilitando serviço por serviço, tudo de acordo com sua necessidade.

Onde eu uso isso?

Precisou integrar sua solução Java com e-mail? Web Services Soap? Web Services Rest?, banco de dados legados? Ou quer gerar um relatório pesado assíncrono? Esta ai seu ponto de partida. ActiveMQ + Spring JMS = Solução simples e rápida com todos os sabores de processamento assíncrono usando filas e tópicos 100% MOM.

Como aprender mais sobre esse assunto?

Tudo isso e muito mais pode ser encontrado no livro ActiveMQ in Action. Excelente livro sobre conceitos de mensageria, JMS e integrações em geral.

Github

Se te interessar, baixe esse projeto no meu Git. Até a próxima!