SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
integração
de sistemas
são paulo, julho/2019
helderdarocha

helder@summa.com.br
mensageria
para
padrões
essenciais

de 

Quem sou eu? Who am I? Кто я?
Helder da Rocha
argonavis.com.br
Tecnologia * Ciência * Arte
HTML & tecnologias Web desde 1995
Autor de cursos e livros sobre

Java, XML e tecnologias Web
helderdarocha.com.br
Por que integrar sistemas?
• Aplicações interessantes raramente vivem isoladas
• Sincronizar emails, calendários, etc.
• Vincular portal a um aplicativo de controle de estoque
• Integrar com serviços e dados na nuvem & IoT
• Viabilizar comunicação entre sistemas incompatíveis
• Não reinventar a roda
• Reusar serviços que funcionam bem
• Aproveitar pontos de integração
Desafios das soluções de integração
Redes não são confiáveis
Redes são lentas
Aplicações são diferentes
Aplicações mudam
Soluções são complexas
Padrões de design
• Abstração de alto nível
• Nome / Icone
• Contexto
• Problema / Solução / Exemplo
• Vocabulário
• Notação
• Padrões relacionados
• Conseqüências da aplicação do padrão
Padrões de integração
• 65 padrões de integração
de sistemas
• Aplicações em Java, .NET e
outras plataformas
• 62 focam em soluções de
mensageria
• Foco: minimizar o
acoplamento entre
componentes
4 estratégias básicas de integração
Transferir arquivos entre aplicações (1)
Compartilhar um banco de dados (2)
Usar interfaces + proxies RPC (3)
Usar mensageria (4)
O que é mensageria?
• Comunicação entre máquinas
• Através de mensagens enviados em canais
(filas) compartilhados entre as máquinas
• Remetente, produtor de mensagens
• Destinatário, consumidor de mensagens
• Mensagem
• Estrutura de dados (objeto, string, tipo, bytes)
• Cabeçalho, metadados
• Corpo, payload
MOM
P
C
O que é um sistema de mensageria?
• Message Oriented Middleware
• Mediator pattern (GoF) entre consumidores e produtores
• Administra o sistema (canais e conexões)
• Etapas
• Criar – produtor cria a mensagem e preenche com dados
• Enviar – produtor adiciona mensagem a um canal
• Entregar – sistema de mensageria transfere a mensagem de
uma máquina para a outra tornando-a disponível ao consumidor
• Receber – consumidor lê a mensagem do canal
• Processar – consumidor extrai os dados da mensagem
MOM
P
C
Padrões de Mensageria (4)
(1) (2) (3) (4)
(5) (6) (7) (8) (9) (10)
Mensageria

(Messaging)
Canal de 

Mensagens

(Message Channel)
Mensagem
(Message)
Dutos e 

Filtros

(Pipes and Filters)
Roteador 

de Mensagens

(Message Router)
Tradutor de 

Mensagens

(Message Translator)
Terminal de 

Mensagens

(Message Endpoint)
componentesarquitetura terminal
Message
PROBLEMA “Como é que duas aplicações conectadas por um
canal de mensagens podem trocar informação?”

SOLUÇÃO “Empacote a informação dentro de uma Mensagem
(Message), um registro de dados que o sistema de mensageria
pode transmitir através de um canal de mensagens.”
1
"Envelope"
Message Channel
PROBLEMA “Como pode uma aplicação comunicar-se com
outra aplicação usando mensageria?”

SOLUÇÃO “Conectar as aplicações usando um Canal de
Mensagens (Message Channel), onde uma aplicação grava
informação no canal e a outra lê do canal.”
Fonte: eaipatterns.com
2
Point-to-point channel
PROBLEMA “Como o remetente pode ter certeza que
apenas um destinatário irá receber a mensagem ou executar um
comando?”
SOLUÇÃO “Envie a mensagem através de um Canal Ponto-
a-Ponto, que garante que apenas um destinatário irá receber a
mensagem.”
Imagens: eaipatterns.com
Tipo de Message Channel
3
Publish-subscribe channel
PROBLEMA “Como pode um remetente transmitir um evento a
todos os destinatários interessados?”
SOLUÇÃO “Envie o evento para um Canal de Difusão, que entrega
uma cópia do evento a cada destinatário.”
Imagens: eaipatterns.com
Tipo de Message Channel
4
Request-Reply
PROBLEMA “Quando uma aplicação envia uma mensagem,
como ela pode obter uma resposta do servidor?”
SOLUÇÃO “Envie um par de mensagens Requisição-
Resposta, cada uma no seu próprio canal”
Imagens: eaipatterns.com
Tipo de Message
5
Contém ID de correlação
Contém Endereço de resposta
Exchange
:getIn()
:getOut()
Message Endpoint
PROBLEMA “Como pode uma aplicação conectar-se a um canal
de mensageria para enviar e receber mensagens?”

SOLUÇÃO “Conecte uma aplicaçao a um canal de mensageria
usando um Terminal de Mensagens, um cliente do sistema de
mensageria que a aplicação pode usar para enviar ou receber
mensagens.”
Imagens: eaipatterns.com
6
Channel Adapter
PROBLEMA “Como conectar uma aplicação ao sistema de
messaging para que ela possa enviar e receber mensagens?”

SOLUÇÃO “Use um Adaptador de Canal que possa acessar a
API da aplicação ou seus dados, e publique mensagens em um
canal, ou que possa receber mensagens enviadas para um canal
e chamar funcionalidades dentro da aplicação”
Imagens: eaipatterns.com
Tipo de Message Endpoint
7
Messaging Gateway
PROBLEMA “Como isolar o acesso ao sistema de mensageria do
restante da aplicação?”

SOLUÇÃO “Use um Gateway de Mensageria, uma classe que
encapsula chamadas especificas ao sistema de mensageria e expõe
uma interface com métodos específicos ao domínio da aplicação”
Imagens: eaipatterns.com
8
Adaptador inbound Adaptador outbound
Tipo de Message Endpoint
Service Activator
PROBLEMA “Como projetar um serviço que possa ser
chamado de forma síncrona (sem usar mensageria) ou de forma
assíncrona (usando tecnologias de mensageria)?”
SOLUÇÃO “Projete um Ativador de Serviços que conecte as
mensagens do canal ao serviço”
Imagens: eaipatterns.com
9
Serviço síncrono
Tipo de Message Endpoint
Arquitetura dutos e filtros
• Padrão de arquitetura (PEAA*)
• Representa a conexão de componentes (filtros), em série,
através de dutos (canais) que os conectam
• Em vez de enviar a mensagem diretamente ao destinatário,
pode-se interceptá-la em etapas intermediárias para validação
do seu conteúdo, roteamento, transformação de dados, etc.
• Cada componente age como filtro; cada canal age como duto.
• Permite criar rotas (arquitetura de pipeline)
Fonte: eaipatterns.com
10
* Patterns of Enterprise Application Architecture (Martin Fowler)
Message Router
PROBLEMA “Como desacoplar passos individuais de
processamento de forma que mensagens possam ser passadas
para diferentes filtros dependendo de uma série de condições?”
SOLUÇÃO “Use um filtro especial, um Roteador de Mensagens
(Message Router) que consome uma Mensagem de um Canal de
Mensagens e publique-a em outro Canal de Mensagens,
dependendo de uma série de condições.”
Imagens: eaipatterns.com
Componente D&F
11
Condições para rotear: algoritmo estático ou
dinâmico, conteúdo, eventos externos, etc.
Splitter e Aggregator
Imagens: eaipatterns.com
Tipos de Message Router
12
Message Translator
PROBLEMA “Como é possível realizar a comunicação entre
sistemas que usam formatos de dados diferentes?”

SOLUÇÃO “Use um filtro especial, um Tradutor de Mensagens,
entre outros filtros ou aplicações para traduzir de um formato de
dados para outro.”
Imagens: eaipatterns.com
13
Componente D&F
Content Enricher + Filter
Imagens: eaipatterns.com
Tipo de Message Translator
14
Claim Check
PROBLEMA “Como podemos reduzir o volume de dados de uma mensagem
enviada através do sistema sem sacrificar o conteúdo da informação?”

SOLUÇÃO “Guarde os dados da mensagem em um repositório persistente e
passe um Recibo de Bagagem para os componentes seguintes. Esses
componentes poderão usar o Recibo para recuperar a informação armazenada”
Imagens: eaipatterns.com
15
Tipo de Message Translator
Como usar os padrões?
• Os padrões são abstrações de alto nível que permitem
descrever a solução de um problema de integração
• Use os padrões para descrever a arquitetura de rotas
de uma solução de integração
• Não existe solução única
• Mesmos resultados podem ser alcançados com arquiteturas
diferentes (+ conseqüências diferentes)
Problema #1: integrar IoT e webservice
Calcular a diferença entre uma temperatura medida e a
temperatura média prevista para uma localidade.
ESP8266

Microcontrolador WiFi
DS18B20

Sensor de temperatura
Neo6mV2

Módulo GPS
Envia dados via WiFi e protocolo MQTT:
000274012354891466388
27,4°C, Latitude -23,5489, Longitude -46,6388
http://tempo.xyz/previsao.php?lat=-23,5489&lon=-466388&format=xml
<dwml ...>
<temperature type="average" units="Celsius">
<value>24.6</value>
</temperature>
</dwml>
Web Service
Usar
coordenadas
Comparar
temperaturas
Possível solução para problema #1
Channel
Adapter de entrada
para MQTT
Message Translator
para traduzir latitude,
longitude e temperatura
Gateway para
webservice
Content Filter
para extrair
temperatura
Aggregator para agrupar
temperaturas recebidas e
computar resultado
Channel Router para
rotear coordenadas
para um canal e
temperatura para outro
temperatura
coordenadas
resposta
contendo
temperatura
Splitter para separar
mensagens contendo ou
temperatura ou coordenadas
mensagens
diferentes com ID
de correlação
Problema #2: integrar Twitter com página Web
• Obter todas as mensagens com hashtag #TheDevConf ou
#TDC2019 no Twitter, periodicamente (polling)
• Processar apenas mensagens que tiverem links
• Estruturar o conteúdo das mensagens identificando
#hashtags, @usuários, links e remetentes
• Separar mensagens que tratam de “Java” das demais
mensagens
• Disponibilizar (arquivo de log e página Web) com duas listas
de mensagens (Java e outras)
Criar página Web contendo tweets selecionados em tempo real.
Possível solução para problema #2
Channel
Adapter de entrada
para Twitter
Translator para extrair
dados do Tweet e
guardar em uma 

mensagem simples
Message Filter para
jogar fora mensagens
que não têm links
Enricher para
adicionar cabeçalho

com assunto da

mensagem
Translator para
converter mensagem
em fragmento HTML
Router para
rotear mensagens
sobre Java para
canal diferente
Channel Adapter para
streams, arquivos ou
serviços Web
DLQ
Como implementar?
• Construir solução caseira usando Java e JMS
• Usar um framework que implemente padrões de
integração de sistemas
• Alternativas populares para Java:
Spring Integration Apache Camel (+Spring Boot)
Spring Framework
• Spring é uma plataforma Java construída sobre conceitos
injeção de dependências (DI) e aspectos
• Componentes Spring vivem em um container e são
interligados pelo framework usando DI
• Spring Integration - infraestrutura para mensageria que
implementa principais padrões
• Ferramentas para a 

plataforma Eclipse: STS
Inbound Channel Adapter
“#TheDevConf	OR	#tdc2019”
Translator: Extrai dados de objeto

Tweet e cria novo objeto Message
Faz query no Twitter:
Põe mensagens no canal raw-tweets
sender: usuario
outros headers: …
Payload:

texto da mensagem
tweet.fromUser =
usuario
tweet.text: =

texto da mensagem
headers: …
Payload: o.s…Tweet
Message Filter
Filtra as mensagens 

selecionando apenas as 

que têm links (http / https)
Apenas mensagens com links

estão neste canal
sender: usuario
outros headers: …
Payload:

texto da mensagem
Invalid-Message Channel
(mensagens que nâo tem links)
Content Enricher
Apenas mensagens com links

estão neste canal
Adiciona um cabeçalho para 

rotular as mensagens 

por assunto (“java” ou “other”)
sender: usuario
subject: assunto
outros headers: …
Payload:

texto da mensagem
Message Translator
sender: usuario
subject: assunto
outros headers: …
Payload:

texto da mensagem
Transforma o texto em fragmento HTML
(links em <a href>, hashtags em <span>, etc.
Palestra de @helderdarocha sobre
EIP patterns e SpringIntegration
#TheDevConf https://pic.twitter.com/
eIcFIYAo8T
<div class="tweet"><span class="sender">usuario</span>Palestra de
<span class="user">@helderdarocha</span> sobre EIP patterns e
SpringIntegration <span class="hashtag”>#TheDevConf</span> <a
href="https://pic.twitter.com/eIcFIYAo8T”>https://pic.twitter.com/
eIcFIYAo8T</a></div>
sender: usuario
subject: assunto
outros headers: …
Payload:

<div>html da 

mensagem</div>
Message Router
sender: usuario
subject: assunto
outros headers: …
Payload:

<div>html </div>
sender: usuario
subject: java
outros headers: …
Payload:

<div>html </div>
sender: usuario
subject: other
outros headers: …
Payload:

<div>html </div>
Arquivo
web/tweets/
JavaTweets.html
Arquivo
web/tweets/
OtherTweets.html
+ Outbound

Channel

Adapter
Resultado
JavaTweets.html
OtherTweets.html
Ajax
Conclusões
• Mensageria é uma estratégia eficiente para integrar
aplicações que não foram projetadas para trabalhar juntas
• É difícil usar mensageria
• Padrões de mensageria promovem a separação de
responsabilidades complexas (processamento,
roteamento, etc.) facilitando a descrição da arquitetura de
uma solução de integração
• Existem produtos que implementam os principais
padrões, facilitando a implementação de soluções
Referência
Gregor Hohpe, Bobby Woolf, et al
Enterprise Integration Patterns
http://www.eaipatterns.com/
E-book + código
https://github.com/helderdarocha/EIP-Course
padrões essenciais de mensageria para integração de sistemas
Baixe esta palestra (depois do TDC) em
http://www.argonavis.com.br/download/tdc_2019_eip.html
+Links para outros recursos, código, referências
https://github.com/helderdarocha/tutorial-messaging-patterns

www.summa.com.br
julho/2019
helder da rocha
helder@summa.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

NATS for Modern Messaging and Microservices
NATS for Modern Messaging and MicroservicesNATS for Modern Messaging and Microservices
NATS for Modern Messaging and MicroservicesApcera
 
The Rise of NoSQL and Polyglot Persistence
The Rise of NoSQL and Polyglot PersistenceThe Rise of NoSQL and Polyglot Persistence
The Rise of NoSQL and Polyglot PersistenceAbdelmonaim Remani
 
Redes de computadores 2 - Aula 4 - Divisão em sub-redes
Redes de computadores 2 - Aula 4 - Divisão em sub-redesRedes de computadores 2 - Aula 4 - Divisão em sub-redes
Redes de computadores 2 - Aula 4 - Divisão em sub-redesCleber Fonseca
 
DevNation Live: Kafka and Debezium
DevNation Live: Kafka and DebeziumDevNation Live: Kafka and Debezium
DevNation Live: Kafka and DebeziumRed Hat Developers
 
Messaging with Spring Integration
Messaging with Spring IntegrationMessaging with Spring Integration
Messaging with Spring IntegrationVadim Mikhnevych
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebArthur Emanuel
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Workshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHubWorkshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHubGilson Junior
 
Kinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vnKinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vnDotnet Open Group
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQAraf Karsh Hamid
 
Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies
Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies
Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies DataWorks Summit/Hadoop Summit
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsEduardo Mendes
 
Introduction To RabbitMQ
Introduction To RabbitMQIntroduction To RabbitMQ
Introduction To RabbitMQKnoldus Inc.
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de UsoNatanael Simões
 

Was ist angesagt? (20)

NATS for Modern Messaging and Microservices
NATS for Modern Messaging and MicroservicesNATS for Modern Messaging and Microservices
NATS for Modern Messaging and Microservices
 
Protocolos de Redes
Protocolos de RedesProtocolos de Redes
Protocolos de Redes
 
The Rise of NoSQL and Polyglot Persistence
The Rise of NoSQL and Polyglot PersistenceThe Rise of NoSQL and Polyglot Persistence
The Rise of NoSQL and Polyglot Persistence
 
RabbitMQ.ppt
RabbitMQ.pptRabbitMQ.ppt
RabbitMQ.ppt
 
Redes de computadores 2 - Aula 4 - Divisão em sub-redes
Redes de computadores 2 - Aula 4 - Divisão em sub-redesRedes de computadores 2 - Aula 4 - Divisão em sub-redes
Redes de computadores 2 - Aula 4 - Divisão em sub-redes
 
DevNation Live: Kafka and Debezium
DevNation Live: Kafka and DebeziumDevNation Live: Kafka and Debezium
DevNation Live: Kafka and Debezium
 
Messaging with Spring Integration
Messaging with Spring IntegrationMessaging with Spring Integration
Messaging with Spring Integration
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos Web
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Workshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHubWorkshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHub
 
Diagrama de Classes
Diagrama de ClassesDiagrama de Classes
Diagrama de Classes
 
Kinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vnKinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vn
 
Yaml
YamlYaml
Yaml
 
Event Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQEvent Sourcing & CQRS, Kafka, Rabbit MQ
Event Sourcing & CQRS, Kafka, Rabbit MQ
 
Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies
Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies
Apache Atlas: Why Big Data Management Requires Hierarchical Taxonomies
 
Java Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e ServletsJava Web - MVC básico com JSP e Servlets
Java Web - MVC básico com JSP e Servlets
 
Introduction To RabbitMQ
Introduction To RabbitMQIntroduction To RabbitMQ
Introduction To RabbitMQ
 
Aula 06 - Diagrama de classes
Aula 06 - Diagrama de classesAula 06 - Diagrama de classes
Aula 06 - Diagrama de classes
 
Aula 07 Css - Parte 1
Aula 07   Css - Parte 1Aula 07   Css - Parte 1
Aula 07 Css - Parte 1
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
 

Ähnlich wie Padrões essenciais de mensageria para integração de sistemas

TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...
TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...
TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...tdc-globalcode
 
Padrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring IntegrationPadrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring IntegrationHelder da Rocha
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebDaniel Brandão
 
Redes de Computadores
Redes de ComputadoresRedes de Computadores
Redes de Computadoresdeisiweg
 
Capítulo 3 funcionalidades e protocolos da camada de aplicação
Capítulo 3   funcionalidades e protocolos da camada de aplicaçãoCapítulo 3   funcionalidades e protocolos da camada de aplicação
Capítulo 3 funcionalidades e protocolos da camada de aplicaçãoSimba Samuel
 
Modelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNAModelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNAwolkartt_18
 
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...veruzkavaz
 
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...veruzkavaz
 
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )Universidade Zambeze
 
Integração de sistemas da informação - Abordagens de integração
Integração de sistemas da informação - Abordagens de integraçãoIntegração de sistemas da informação - Abordagens de integração
Integração de sistemas da informação - Abordagens de integraçãoJoao Johanes
 
201406Carvalho
201406Carvalho201406Carvalho
201406CarvalhoAfonso Pra
 

Ähnlich wie Padrões essenciais de mensageria para integração de sistemas (20)

TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...
TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...
TDC2017 | POA Trilha Arquitetura - 15 padrões essenciais de mensageria para i...
 
Padrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring IntegrationPadrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring Integration
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Servidores de Aplicações
Servidores de AplicaçõesServidores de Aplicações
Servidores de Aplicações
 
Modelo de Referência OSI
Modelo de Referência OSIModelo de Referência OSI
Modelo de Referência OSI
 
aula-13-revisc3a3o.pdf
aula-13-revisc3a3o.pdfaula-13-revisc3a3o.pdf
aula-13-revisc3a3o.pdf
 
Hornet - 1.Conceitos de Mensageria
Hornet - 1.Conceitos de MensageriaHornet - 1.Conceitos de Mensageria
Hornet - 1.Conceitos de Mensageria
 
Redes de Computadores
Redes de ComputadoresRedes de Computadores
Redes de Computadores
 
Capítulo 3 funcionalidades e protocolos da camada de aplicação
Capítulo 3   funcionalidades e protocolos da camada de aplicaçãoCapítulo 3   funcionalidades e protocolos da camada de aplicação
Capítulo 3 funcionalidades e protocolos da camada de aplicação
 
Aulas frc 04
Aulas frc  04Aulas frc  04
Aulas frc 04
 
Modelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNAModelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNA
 
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...
 
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...Ccna exploration   fundamentos de rede - 3 funcionalidade e protocolos da cam...
Ccna exploration fundamentos de rede - 3 funcionalidade e protocolos da cam...
 
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
Telematica, tipos de telematica , Autenticacao, Redes virtuais privadas ( VPN )
 
Modelo osi
Modelo osiModelo osi
Modelo osi
 
Web services
Web servicesWeb services
Web services
 
http
httphttp
http
 
Integração de sistemas da informação - Abordagens de integração
Integração de sistemas da informação - Abordagens de integraçãoIntegração de sistemas da informação - Abordagens de integração
Integração de sistemas da informação - Abordagens de integração
 
201406Carvalho
201406Carvalho201406Carvalho
201406Carvalho
 
84 412-aula01informaticapf
84 412-aula01informaticapf84 412-aula01informaticapf
84 412-aula01informaticapf
 

Mehr von Helder da Rocha

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsHelder da Rocha
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Helder da Rocha
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosHelder da Rocha
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a WebHelder da Rocha
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosHelder da Rocha
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Helder da Rocha
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Helder da Rocha
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Helder da Rocha
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsHelder da Rocha
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 

Mehr von Helder da Rocha (20)

Como criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.jsComo criar um mapa temático interativo com dados abertos e D3.js
Como criar um mapa temático interativo com dados abertos e D3.js
 
Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)Transforming public data into thematic maps (TDC2019 presentation)
Transforming public data into thematic maps (TDC2019 presentation)
 
TDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativosTDC 2019: transformando 
dados
públicos
em mapas interativos
TDC 2019: transformando 
dados
públicos
em mapas interativos
 
Visualização de dados e a Web
Visualização de dados e a WebVisualização de dados e a Web
Visualização de dados e a Web
 
Eletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativosEletrônica Criativa: criando circuitos com materiais alternativos
Eletrônica Criativa: criando circuitos com materiais alternativos
 
Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)Introdução à Visualização de Dados (2015)
Introdução à Visualização de Dados (2015)
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7Minicurso de Segurança em Java EE 7
Minicurso de Segurança em Java EE 7
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Curso de Java: Threads
Curso de Java: ThreadsCurso de Java: Threads
Curso de Java: Threads
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Curso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e StreamsCurso de Java: Introdução a lambda e Streams
Curso de Java: Introdução a lambda e Streams
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 

Kürzlich hochgeladen

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Kürzlich hochgeladen (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Padrões essenciais de mensageria para integração de sistemas

  • 1. integração de sistemas são paulo, julho/2019 helderdarocha
 helder@summa.com.br mensageria para padrões essenciais
 de 

  • 2. Quem sou eu? Who am I? Кто я? Helder da Rocha argonavis.com.br Tecnologia * Ciência * Arte HTML & tecnologias Web desde 1995 Autor de cursos e livros sobre
 Java, XML e tecnologias Web helderdarocha.com.br
  • 3. Por que integrar sistemas? • Aplicações interessantes raramente vivem isoladas • Sincronizar emails, calendários, etc. • Vincular portal a um aplicativo de controle de estoque • Integrar com serviços e dados na nuvem & IoT • Viabilizar comunicação entre sistemas incompatíveis • Não reinventar a roda • Reusar serviços que funcionam bem • Aproveitar pontos de integração
  • 4. Desafios das soluções de integração Redes não são confiáveis Redes são lentas Aplicações são diferentes Aplicações mudam Soluções são complexas
  • 5. Padrões de design • Abstração de alto nível • Nome / Icone • Contexto • Problema / Solução / Exemplo • Vocabulário • Notação • Padrões relacionados • Conseqüências da aplicação do padrão
  • 6. Padrões de integração • 65 padrões de integração de sistemas • Aplicações em Java, .NET e outras plataformas • 62 focam em soluções de mensageria • Foco: minimizar o acoplamento entre componentes
  • 7. 4 estratégias básicas de integração Transferir arquivos entre aplicações (1) Compartilhar um banco de dados (2) Usar interfaces + proxies RPC (3) Usar mensageria (4)
  • 8. O que é mensageria? • Comunicação entre máquinas • Através de mensagens enviados em canais (filas) compartilhados entre as máquinas • Remetente, produtor de mensagens • Destinatário, consumidor de mensagens • Mensagem • Estrutura de dados (objeto, string, tipo, bytes) • Cabeçalho, metadados • Corpo, payload MOM P C
  • 9. O que é um sistema de mensageria? • Message Oriented Middleware • Mediator pattern (GoF) entre consumidores e produtores • Administra o sistema (canais e conexões) • Etapas • Criar – produtor cria a mensagem e preenche com dados • Enviar – produtor adiciona mensagem a um canal • Entregar – sistema de mensageria transfere a mensagem de uma máquina para a outra tornando-a disponível ao consumidor • Receber – consumidor lê a mensagem do canal • Processar – consumidor extrai os dados da mensagem MOM P C
  • 10. Padrões de Mensageria (4) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Mensageria
 (Messaging) Canal de 
 Mensagens (Message Channel) Mensagem (Message) Dutos e 
 Filtros (Pipes and Filters) Roteador 
 de Mensagens (Message Router) Tradutor de 
 Mensagens (Message Translator) Terminal de 
 Mensagens (Message Endpoint) componentesarquitetura terminal
  • 11. Message PROBLEMA “Como é que duas aplicações conectadas por um canal de mensagens podem trocar informação?” SOLUÇÃO “Empacote a informação dentro de uma Mensagem (Message), um registro de dados que o sistema de mensageria pode transmitir através de um canal de mensagens.” 1 "Envelope"
  • 12. Message Channel PROBLEMA “Como pode uma aplicação comunicar-se com outra aplicação usando mensageria?” SOLUÇÃO “Conectar as aplicações usando um Canal de Mensagens (Message Channel), onde uma aplicação grava informação no canal e a outra lê do canal.” Fonte: eaipatterns.com 2
  • 13. Point-to-point channel PROBLEMA “Como o remetente pode ter certeza que apenas um destinatário irá receber a mensagem ou executar um comando?” SOLUÇÃO “Envie a mensagem através de um Canal Ponto- a-Ponto, que garante que apenas um destinatário irá receber a mensagem.” Imagens: eaipatterns.com Tipo de Message Channel 3
  • 14. Publish-subscribe channel PROBLEMA “Como pode um remetente transmitir um evento a todos os destinatários interessados?” SOLUÇÃO “Envie o evento para um Canal de Difusão, que entrega uma cópia do evento a cada destinatário.” Imagens: eaipatterns.com Tipo de Message Channel 4
  • 15. Request-Reply PROBLEMA “Quando uma aplicação envia uma mensagem, como ela pode obter uma resposta do servidor?” SOLUÇÃO “Envie um par de mensagens Requisição- Resposta, cada uma no seu próprio canal” Imagens: eaipatterns.com Tipo de Message 5 Contém ID de correlação Contém Endereço de resposta Exchange :getIn() :getOut()
  • 16. Message Endpoint PROBLEMA “Como pode uma aplicação conectar-se a um canal de mensageria para enviar e receber mensagens?” SOLUÇÃO “Conecte uma aplicaçao a um canal de mensageria usando um Terminal de Mensagens, um cliente do sistema de mensageria que a aplicação pode usar para enviar ou receber mensagens.” Imagens: eaipatterns.com 6
  • 17. Channel Adapter PROBLEMA “Como conectar uma aplicação ao sistema de messaging para que ela possa enviar e receber mensagens?” SOLUÇÃO “Use um Adaptador de Canal que possa acessar a API da aplicação ou seus dados, e publique mensagens em um canal, ou que possa receber mensagens enviadas para um canal e chamar funcionalidades dentro da aplicação” Imagens: eaipatterns.com Tipo de Message Endpoint 7
  • 18. Messaging Gateway PROBLEMA “Como isolar o acesso ao sistema de mensageria do restante da aplicação?” SOLUÇÃO “Use um Gateway de Mensageria, uma classe que encapsula chamadas especificas ao sistema de mensageria e expõe uma interface com métodos específicos ao domínio da aplicação” Imagens: eaipatterns.com 8 Adaptador inbound Adaptador outbound Tipo de Message Endpoint
  • 19. Service Activator PROBLEMA “Como projetar um serviço que possa ser chamado de forma síncrona (sem usar mensageria) ou de forma assíncrona (usando tecnologias de mensageria)?” SOLUÇÃO “Projete um Ativador de Serviços que conecte as mensagens do canal ao serviço” Imagens: eaipatterns.com 9 Serviço síncrono Tipo de Message Endpoint
  • 20. Arquitetura dutos e filtros • Padrão de arquitetura (PEAA*) • Representa a conexão de componentes (filtros), em série, através de dutos (canais) que os conectam • Em vez de enviar a mensagem diretamente ao destinatário, pode-se interceptá-la em etapas intermediárias para validação do seu conteúdo, roteamento, transformação de dados, etc. • Cada componente age como filtro; cada canal age como duto. • Permite criar rotas (arquitetura de pipeline) Fonte: eaipatterns.com 10 * Patterns of Enterprise Application Architecture (Martin Fowler)
  • 21. Message Router PROBLEMA “Como desacoplar passos individuais de processamento de forma que mensagens possam ser passadas para diferentes filtros dependendo de uma série de condições?” SOLUÇÃO “Use um filtro especial, um Roteador de Mensagens (Message Router) que consome uma Mensagem de um Canal de Mensagens e publique-a em outro Canal de Mensagens, dependendo de uma série de condições.” Imagens: eaipatterns.com Componente D&F 11 Condições para rotear: algoritmo estático ou dinâmico, conteúdo, eventos externos, etc.
  • 22. Splitter e Aggregator Imagens: eaipatterns.com Tipos de Message Router 12
  • 23. Message Translator PROBLEMA “Como é possível realizar a comunicação entre sistemas que usam formatos de dados diferentes?” SOLUÇÃO “Use um filtro especial, um Tradutor de Mensagens, entre outros filtros ou aplicações para traduzir de um formato de dados para outro.” Imagens: eaipatterns.com 13 Componente D&F
  • 24. Content Enricher + Filter Imagens: eaipatterns.com Tipo de Message Translator 14
  • 25. Claim Check PROBLEMA “Como podemos reduzir o volume de dados de uma mensagem enviada através do sistema sem sacrificar o conteúdo da informação?” SOLUÇÃO “Guarde os dados da mensagem em um repositório persistente e passe um Recibo de Bagagem para os componentes seguintes. Esses componentes poderão usar o Recibo para recuperar a informação armazenada” Imagens: eaipatterns.com 15 Tipo de Message Translator
  • 26. Como usar os padrões? • Os padrões são abstrações de alto nível que permitem descrever a solução de um problema de integração • Use os padrões para descrever a arquitetura de rotas de uma solução de integração • Não existe solução única • Mesmos resultados podem ser alcançados com arquiteturas diferentes (+ conseqüências diferentes)
  • 27. Problema #1: integrar IoT e webservice Calcular a diferença entre uma temperatura medida e a temperatura média prevista para uma localidade. ESP8266 Microcontrolador WiFi DS18B20 Sensor de temperatura Neo6mV2 Módulo GPS Envia dados via WiFi e protocolo MQTT: 000274012354891466388 27,4°C, Latitude -23,5489, Longitude -46,6388 http://tempo.xyz/previsao.php?lat=-23,5489&lon=-466388&format=xml <dwml ...> <temperature type="average" units="Celsius"> <value>24.6</value> </temperature> </dwml> Web Service Usar coordenadas Comparar temperaturas
  • 28. Possível solução para problema #1 Channel Adapter de entrada para MQTT Message Translator para traduzir latitude, longitude e temperatura Gateway para webservice Content Filter para extrair temperatura Aggregator para agrupar temperaturas recebidas e computar resultado Channel Router para rotear coordenadas para um canal e temperatura para outro temperatura coordenadas resposta contendo temperatura Splitter para separar mensagens contendo ou temperatura ou coordenadas mensagens diferentes com ID de correlação
  • 29. Problema #2: integrar Twitter com página Web • Obter todas as mensagens com hashtag #TheDevConf ou #TDC2019 no Twitter, periodicamente (polling) • Processar apenas mensagens que tiverem links • Estruturar o conteúdo das mensagens identificando #hashtags, @usuários, links e remetentes • Separar mensagens que tratam de “Java” das demais mensagens • Disponibilizar (arquivo de log e página Web) com duas listas de mensagens (Java e outras) Criar página Web contendo tweets selecionados em tempo real.
  • 30. Possível solução para problema #2 Channel Adapter de entrada para Twitter Translator para extrair dados do Tweet e guardar em uma 
 mensagem simples Message Filter para jogar fora mensagens que não têm links Enricher para adicionar cabeçalho
 com assunto da
 mensagem Translator para converter mensagem em fragmento HTML Router para rotear mensagens sobre Java para canal diferente Channel Adapter para streams, arquivos ou serviços Web DLQ
  • 31. Como implementar? • Construir solução caseira usando Java e JMS • Usar um framework que implemente padrões de integração de sistemas • Alternativas populares para Java: Spring Integration Apache Camel (+Spring Boot)
  • 32. Spring Framework • Spring é uma plataforma Java construída sobre conceitos injeção de dependências (DI) e aspectos • Componentes Spring vivem em um container e são interligados pelo framework usando DI • Spring Integration - infraestrutura para mensageria que implementa principais padrões • Ferramentas para a 
 plataforma Eclipse: STS
  • 33. Inbound Channel Adapter “#TheDevConf OR #tdc2019” Translator: Extrai dados de objeto
 Tweet e cria novo objeto Message Faz query no Twitter: Põe mensagens no canal raw-tweets sender: usuario outros headers: … Payload:
 texto da mensagem tweet.fromUser = usuario tweet.text: =
 texto da mensagem headers: … Payload: o.s…Tweet
  • 34. Message Filter Filtra as mensagens 
 selecionando apenas as 
 que têm links (http / https) Apenas mensagens com links
 estão neste canal sender: usuario outros headers: … Payload:
 texto da mensagem Invalid-Message Channel (mensagens que nâo tem links)
  • 35. Content Enricher Apenas mensagens com links
 estão neste canal Adiciona um cabeçalho para 
 rotular as mensagens 
 por assunto (“java” ou “other”) sender: usuario subject: assunto outros headers: … Payload:
 texto da mensagem
  • 36. Message Translator sender: usuario subject: assunto outros headers: … Payload:
 texto da mensagem Transforma o texto em fragmento HTML (links em <a href>, hashtags em <span>, etc. Palestra de @helderdarocha sobre EIP patterns e SpringIntegration #TheDevConf https://pic.twitter.com/ eIcFIYAo8T <div class="tweet"><span class="sender">usuario</span>Palestra de <span class="user">@helderdarocha</span> sobre EIP patterns e SpringIntegration <span class="hashtag”>#TheDevConf</span> <a href="https://pic.twitter.com/eIcFIYAo8T”>https://pic.twitter.com/ eIcFIYAo8T</a></div> sender: usuario subject: assunto outros headers: … Payload:
 <div>html da 
 mensagem</div>
  • 37. Message Router sender: usuario subject: assunto outros headers: … Payload:
 <div>html </div> sender: usuario subject: java outros headers: … Payload:
 <div>html </div> sender: usuario subject: other outros headers: … Payload:
 <div>html </div> Arquivo web/tweets/ JavaTweets.html Arquivo web/tweets/ OtherTweets.html + Outbound
 Channel
 Adapter
  • 39. Conclusões • Mensageria é uma estratégia eficiente para integrar aplicações que não foram projetadas para trabalhar juntas • É difícil usar mensageria • Padrões de mensageria promovem a separação de responsabilidades complexas (processamento, roteamento, etc.) facilitando a descrição da arquitetura de uma solução de integração • Existem produtos que implementam os principais padrões, facilitando a implementação de soluções
  • 40. Referência Gregor Hohpe, Bobby Woolf, et al Enterprise Integration Patterns http://www.eaipatterns.com/
  • 42. padrões essenciais de mensageria para integração de sistemas Baixe esta palestra (depois do TDC) em http://www.argonavis.com.br/download/tdc_2019_eip.html +Links para outros recursos, código, referências https://github.com/helderdarocha/tutorial-messaging-patterns
 www.summa.com.br julho/2019 helder da rocha helder@summa.com.br