Upload
luciano-molinari
View
840
Download
6
Embed Size (px)
DESCRIPTION
Slides da minha apresentação "Java e AMQP: Uma alternativa ao JMS" realizada no TDC2012.
Citation preview
Globalcode – Open4education
Trilha – Java EE
Java e AMQP: Uma alternativa ao JMSLuciano Davoglio Molinari
[email protected]@LucMolinari
http://lucianomolinari.wordpress.com
Globalcode – Open4education
Agenda
Mensageria
Modelos
JMS
AMQP
AMQP x JMS
Rabbit MQ
Integração Java x AMQP (Demo)
2
Globalcode – Open4education
Mensageria
Sistemas heterogêniosBaixo acomplamentoAssíncronoConfiabilidade/Escalabilidade/DistribuiçãoComunicação através de um MOM (Message-Oriented-Middleware)
3
Globalcode – Open4education
Mensageria - MOM
Implementação do protocolo
Armazenamento
Disponibilidade/performance
Roteamento
4
Globalcode – Open4education
Mensageria
MOMSistema A Sistema BEscreve
MensagemRecebe
Mensagem
5
Globalcode – Open4education
Mensageria - Restrições
Novo componente na arquitetura (MOM)
Nativamente assíncrono
Mais de 1 padrão (JMS, MSMQ, AMQP)
6
Globalcode – Open4education
Modelo Point-to-Point
Uso de filasApenas 1 consumidor1 ou mais produtores
MOM
Produtor 1
ConsumidorEscreve
MensagemRecebe
Mensagem
Produtor N
…
Armazena as
mensagens em uma fila
7
Globalcode – Open4education
Publish/Subscribe
Uso de tópico1 ou mais consumidores1 ou mais produtores
MOM
Produtor 1
Escreve Mensagem
Produtor N
…
Armazena as
mensagens em um tópico
Consumidor 1
Consumidor N
…Recebe
Mensagem
8
Globalcode – Open4education
JMS (Java Message Service)
Especificação madura/conceituada
Primeiro padrão apoiado por grandes players
Point-to-point/Publish-subscribe
Baixa curva de aprendizado
9
Globalcode – Open4education
JMS - Restrições
Padroniza somente a API
Cada implementação define seu próprio protocolo
Interoperabilidade dentro da plataforma Java
10
Globalcode – Open4education
AMQP (Advanced Message Queuing Protocol)
Desenvolvido no banco JP Morgan
Outras empresas: Red Hat, Cisco, Microsoft, entre outras
2011 – OASIS
Out/2011 – AMQP 1.0
11
Globalcode – Open4education
AMQP
Protocolo aberto
Padronizado
Interoperável (realmente!)
Confiável
Cases de missão crítica (financeiro, telecom)
12
Globalcode – Open4education
AMQP – Fluxo mensagem
Mensagens são sempre enviadas para exchangesQueues são conectadas à exchanges através de
bindings
Prod. 1 Cons. 1
Prod. N
…
Exch
ange
1
Q1
Q2 Cons. 2
Broker
13
Globalcode – Open4education
AMQP – Exchange Types
Direct
Fanout
Topic
Header
14
Globalcode – Open4education
Direct Exchange
Binding deve casar exatamente com a routing key
Routing key pode ser vaziaParecido com o modelo point-to-point (Queue) do JMS
Prod. 1
Cons. 1
Prod. N
…
Exch
ange
1
Q1
Broker
15
Globalcode – Open4education
Fanout Exchange
Não suporta routing-key
Mensagens vão para todas filas ligadas ao exchange
Parecido com o modelo Pub/Sub do JMS sem seletor de mensagem
Prod. 1 Cons. 1
Prod. N
…
Exch
ange
1
Q1
Broker
Cons. 2Q2
16
Globalcode – Open4education
Topic Exchange
Suporta routing-keyParecido com Direct, mas suporta wildcard nas routing keysParecido com o modelo Pub/Sub do JMS com seletor de mensagem
Prod. 1 Cons. 1
Prod. N
…
Exch
ange
1
Q1
Broker
Cons. 2Q2
*.key1.*
Key2.#
17
Globalcode – Open4education
Header Exchange
Parecido com Topic ExchangeNão suporta routing keyRoteamento é feito através de atributos do cabeçalho (header)Menos usado
18
Globalcode – Open4education
AMQP/JMS
JMSAMQP JMS
Padronização à nível de protocolo
Padronização à nível de API
Interoperabildade Interoperabilidade (Java)
Mensagem formada por header, properties e body
Mensagem formada por header, properties e body
Body do tipo binário Body do tipo TextMessage, ObjectMessage, entre outros
Direct Exchange Queue
Fanout Exchange Topic sem seletor de mensagem
Topic Exchange Topic com seletor de mensagem
Header Exchange Topic com seletor de mensagem19
Globalcode – Open4education
Rabbit MQ
Sistema de mensageria AMQPRobustoCluster/Alta disponibilidadeInterface WEB de gerenciamentoBase de dados internaMulti-plataforma (SO)Multi-plataforma (Linguagens)
20
Globalcode – Open4education
Rabbit MQ
Open source e suporte comercialEscrito em ErlangMantido pela SpringSource/VMWareRápido (Muito!)LeveUsado fortemente na nuvem (EC2)
21
Globalcode – Open4education
Integração Java x AMQP
Própria biblioteca do RabbitMQVários exemplos no site oficial
Spring AMQPMesma forma de trabalho simplificada.
22
Globalcode – Open4education
Lib Rabbit MQ - Sender
import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Channel;
public class Send {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println(" [x] Sent '" + message + "'"); channel.close(); connection.close(); }}
2323
Globalcode – Open4education
Spring AMQP
Demo
24
Globalcode – Open4education
Dúvidas?
Luciano Davoglio MolinariE-mail: [email protected]
Twitter: @LucMolinarihttp://lucianomolinari.wordpress.com