Tdc2012 java e amqp - uma alternativa ao jms

25
Globalcode – Open4education Trilha – Java EE Java e AMQP: Uma alternativa ao JMS Luciano Davoglio Molinari [email protected] @LucMolinari http://lucianomolinari.wordpress.com

description

Slides da minha apresentação "Java e AMQP: Uma alternativa ao JMS" realizada no TDC2012.

Transcript of Tdc2012 java e amqp - uma alternativa ao jms

Page 1: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Trilha – Java EE

Java e AMQP: Uma alternativa ao JMSLuciano Davoglio Molinari

[email protected]@LucMolinari

http://lucianomolinari.wordpress.com

Page 2: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Agenda

Mensageria

Modelos

JMS

AMQP

AMQP x JMS

Rabbit MQ

Integração Java x AMQP (Demo)

2

Page 3: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Mensageria

Sistemas heterogêniosBaixo acomplamentoAssíncronoConfiabilidade/Escalabilidade/DistribuiçãoComunicação através de um MOM (Message-Oriented-Middleware)

3

Page 4: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Mensageria - MOM

Implementação do protocolo

Armazenamento

Disponibilidade/performance

Roteamento

4

Page 5: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Mensageria

MOMSistema A Sistema BEscreve

MensagemRecebe

Mensagem

5

Page 6: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Mensageria - Restrições

Novo componente na arquitetura (MOM)

Nativamente assíncrono

Mais de 1 padrão (JMS, MSMQ, AMQP)

6

Page 7: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 8: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 9: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 10: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

JMS - Restrições

Padroniza somente a API

Cada implementação define seu próprio protocolo

Interoperabilidade dentro da plataforma Java

10

Page 11: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 12: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

AMQP

Protocolo aberto

Padronizado

Interoperável (realmente!)

Confiável

Cases de missão crítica (financeiro, telecom)

12

Page 13: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 14: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

AMQP – Exchange Types

Direct

Fanout

Topic

Header

14

Page 15: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 16: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 17: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 18: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Header Exchange

Parecido com Topic ExchangeNão suporta routing keyRoteamento é feito através de atributos do cabeçalho (header)Menos usado

18

Page 19: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 20: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Rabbit MQ

Sistema de mensageria AMQPRobustoCluster/Alta disponibilidadeInterface WEB de gerenciamentoBase de dados internaMulti-plataforma (SO)Multi-plataforma (Linguagens)

20

Page 21: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Rabbit MQ

Open source e suporte comercialEscrito em ErlangMantido pela SpringSource/VMWareRápido (Muito!)LeveUsado fortemente na nuvem (EC2)

21

Page 22: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Integração Java x AMQP

Própria biblioteca do RabbitMQVários exemplos no site oficial

Spring AMQPMesma forma de trabalho simplificada.

22

Page 23: Tdc2012 java e amqp - uma alternativa ao jms

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

Page 24: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Spring AMQP

Demo

24

Page 25: Tdc2012 java e amqp - uma alternativa ao jms

Globalcode – Open4education

Dúvidas?

Luciano Davoglio MolinariE-mail: [email protected]

Twitter: @LucMolinarihttp://lucianomolinari.wordpress.com