Tdc2012 java e amqp - uma alternativa ao jms

Post on 24-Jun-2015

840 views 6 download

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

Globalcode – Open4education

Trilha – Java EE

Java e AMQP: Uma alternativa ao JMSLuciano Davoglio Molinari

lucmolinari@gmail.com@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: lucmolinari@gmail.com

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