Arquiteto

Mensageria não é um bicho de 7 cabeças

Postado em Atualizado em

activemq-5-x-box-reflectionVocê já ouviu falar de MOM?

Message oriented middleware (MOM) é 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 que 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 tecnologias, diferentes protocolos, diferentes mecanismos de persistências, assim, se faz necessario garantir serviços dentro da solução de integração como por exemplo: desacoplamento, entrega de mensagem, persistência de mensagem, politicas de retry, processamento assíncrono, escalabilidade, confiabilidade, transação, interrupções, segurança, clusterização e muito etc. Um MOM já faz tudo isso e muito mais.

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

Essa é 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 Apache ActiveMQ e Spring JMS, você vera que é muito fácil e pode usar para fazer coisas pequenas também. Como diria um amigo meu, “só na manteguinha….. 🙂 “.

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ários 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 instancia 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 é justamente a “cereja de bolo” desse tipo de serviço.

Você já ouviu falar de Spring JMS?

Spring JMS é 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 facade 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 se 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:

Segue os passos resumido 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:

1

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

2

Criar um bean que envia a mensagem da fila:

2

Criar um bean que consome as mensagens da fila:

3

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

3

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

3

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.

Aonde 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 assincrono? Esta ai seu ponto de partido. 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 eu aprendo 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. Boa leitura para todos 😉 .

“Mas tu, ó SENHOR, me proteges como um escudo. Tu me dás a vitória e renovas a minha coragem.” Salmos 3:3

Arquitetura DDD Desmistificado

Postado em

sem-titulo

Nesse belíssimo artigo sobre DDD, Lorenzo Dee desmistificou vários segredos a respeito de DDD que na maioria das vezes ficam nas “entrelinhas” escondidos nos livros. Você gostaria de aprender a como criar uma arquiteturas dessas? Veja no curso de Arquitetura de Software AQT M1. Bons estudos 😉 !

Tu és grande e poderoso, glorioso, esplêndido e majestoso. Tudo o que existe no céu e na terra pertence a ti;1 Crônicas 29:11

Características de um Arquiteto de Software #2

Postado em

wellroundedarchitect-1024x574-1Agindo como Líder

Os bons arquitetos de software entendem que seu papel como líder não é necessariamente dizer aos desenvolvedores o que fazer. Em vez disso, bons arquitetos agem como um guia, orientando uma equipe de desenvolvedores para a mesma visão técnica baseando-se em habilidades de liderança como contar histórias, influenciar, resolver conflitos, ensinar e construir a confiança com os indivíduos para transformar sua visão arquitetônica em realidade. Um bom líder e, portanto, um bom arquiteto, escutará atentamente as opiniões de cada colaborador, ajustando sua visão com o feedback da equipe. Isso leva bem para o próximo ponto. Para qualquer dúvidas, veja o post inicial dessa série.

“Jesus começou a falar com eles e disse: — Eu sou a luz do mundo; quem me segue nunca andará na escuridão, mas terá a luz da vida.” João 8:12

Características de um Arquiteto de Software

Postado em Atualizado em

Quais são as características básicas que um bom arquiteto de software atualmente deve possuir? Resumidamente, temos 6 itens primordiais:

  • Se Comunicar  bem
  • Agir como Líder
  • Ser um desenvolvedor
  • Ter o foco no sistemas
  • Pensar como um empreendedor
  • Balancear estratégica com pensamento tático

wellroundedarchitect-1024x574-1

A partir de hoje estarei escrevendo gradativamente sobre cada um desses itens, criando uma série de posts a respeito do assunto. Te vejo por ai 😉 !

“Que o Senhor os faça compreender melhor o amor de Deus por vocês e a firmeza que ele, Cristo, dá!”2 Tessalonicenses 3:5

Operações com Retry em Java

Postado em

retryNa engenharia de software ágil que eu prático, existe uma regra simples que me salva de muitas dores de cabeça:

“O menos é mais!” 

Isso quer dizer que como regra, eu sempre tento ao máximo fazer ou criar uma solução mais simples possível. Nesse contexto, algumas soluções Java precisam de operações com”retry” automático. Antes de você concluir que precisa de um servidor de mensageria + persistência de filas como a maioria diz por ai, considere outras opções mais simples. Você pode se surpreender! Segue algumas estratégias de retry simples com Java:

“Respondeu-lhes Jesus: A obra de Deus é esta: que creiais naquele que por ele foi enviado.” João 6:29

Design Patterns – SourceMaking

Postado em

abstract_factory_example1-2xNa engenharia de software, um padrão de projeto é uma solução repetível geral para um problema que ocorre comumente em design de software. Um padrão de design não é um projeto acabado que pode ser transformado diretamente em código. É uma descrição ou modelo de como resolver um problema que pode ser utilizada em muitas situações diferentes.

Confesso que mesmo lendo vários livros sobre esse assunto, foi nesse site chamado de sourcemaking que eu encontrei a melhor documentação, os melhores gráficos e explicações sobre design patterns. Leitura obrigatória para os projetistas e arquitetos de software! t+

“O Senhor não demora a fazer o que prometeu, como alguns pensam.” 2 Pedro 3:9

Setembro vou me divertir com esses dois….

Postado em

20160905_082823

“…Nada é impossível para ti.” Jeremias 32:17