SlideShare uma empresa Scribd logo
Trilha – Java EE

Java e AMQP: Uma alternativa ao JMS
        Luciano 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ênios
     Baixo acomplamento
     Assíncrono
     Confiabilidade/Escalabilidade/Distribuição
     Comunicaçã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




                 Escreve          Recebe
    Sistema A   Mensagem   MOM                 Sistema B
                                 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 filas
     Apenas 1 consumidor
     1 ou mais produtores
                                  Armazena as
                                   mensagens
                                   em uma fila
    Produtor 1
                  Escreve                Recebe
       …         Mensagem   MOM                         Consumidor
                                        Mensagem

    Produtor N



7                                                Globalcode – Open4education
Publish/Subscribe
     Uso de tópico
     1 ou mais consumidores
     1 ou mais produtores


    Produtor 1                                         Consumidor 1
                  Escreve                    Recebe
       …         Mensagem   MOM                              …
                                            Mensagem

    Produtor N                                         Consumidor N
                             Armazena as
                              mensagens
                             em um tópico

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 exchanges
 • Queues são conectadas à exchanges através de bindings


     Prod. 1                                 Q1             Cons. 1
                       Exchange 1



       …

                                             Q2             Cons. 2
     Prod. N
                                    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 vazia
       Parecido com o modelo point-to-point (Queue) do JMS



     Prod. 1
                              Exchange 1



       …                                            Q1             Cons. 1

     Prod. N
                                           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                                           Q1             Cons. 1
                                 Exchange 1



       …

                                                       Q2             Cons. 2
     Prod. N
                                              Broker



16                                                          Globalcode – Open4education
Topic Exchange
       Suporta routing-key
       Parecido com Direct, mas suporta wildcard nas routing keys
       Parecido com o modelo Pub/Sub do JMS com seletor de mensagem



     Prod. 1                                   y 1.*    Q1             Cons. 1
                                              e
                                          *.k
                            Exchange 1



       …                                  Key
                                                  2.#
                                                        Q2             Cons. 2
     Prod. N
                                         Broker



17                                                           Globalcode – Open4education
Header Exchange
     Parecido com Topic Exchange
     Não suporta routing key
     Roteamento é feito através de atributos do cabeçalho (header)
     Menos usado




18                                                       Globalcode – Open4education
AMQP/JMS
 AMQP                                JMS    JMS
 Padronização à nível de protocolo   Padronização à nível de API

 Interoperabildade                   Interoperabilidade (Java)
 Mensagem formada por header,        Mensagem formada por header,
 properties e body                   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 mensagem



19                                                    Globalcode – Open4education
Rabbit MQ
     Sistema de mensageria AMQP
     Robusto
     Cluster/Alta disponibilidade
     Interface WEB de gerenciamento
     Base de dados interna
     Multi-plataforma (SO)
     Multi-plataforma (Linguagens)



20                                    Globalcode – Open4education
Rabbit MQ
     Open source e suporte comercial
     Escrito em Erlang
     Mantido pela SpringSource/VMWare
     Rápido (Muito!)
     Leve
     Usado fortemente na nuvem (EC2)




21                                      Globalcode – Open4education
Integração Java x AMQP
     Própria biblioteca do RabbitMQ
     Vários exemplos no site oficial



     Spring AMQP
     Mesma 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();
         }
     }
23                                                                             Globalcode – Open4education
Spring AMQP
     Demo




24             Globalcode – Open4education
Dúvidas?

       Luciano Davoglio Molinari
   E-mail: lucmolinari@gmail.com
         Twitter: @LucMolinari
http://lucianomolinari.wordpress.com

                                   Globalcode – Open4education

Mais conteúdo relacionado

Semelhante a Tdc2012 java e amqp - uma alternativa ao jms

Message Broker & .Net Core - Introdução ao RabbitMQ
Message Broker & .Net Core - Introdução ao RabbitMQMessage Broker & .Net Core - Introdução ao RabbitMQ
Message Broker & .Net Core - Introdução ao RabbitMQ
Luiz Carlos Faria
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2Eric Lemes
 
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
André Curvello
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJSGiovanni Bassi
 
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux EmbarcadoTDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
Cleiton Bueno
 
Bruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisBruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveis
Viotti Equipamentos Médicos
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
tdc-globalcode
 
SI - Comunicação
SI - ComunicaçãoSI - Comunicação
SI - Comunicação
Frederico Madeira
 

Semelhante a Tdc2012 java e amqp - uma alternativa ao jms (8)

Message Broker & .Net Core - Introdução ao RabbitMQ
Message Broker & .Net Core - Introdução ao RabbitMQMessage Broker & .Net Core - Introdução ao RabbitMQ
Message Broker & .Net Core - Introdução ao RabbitMQ
 
Tdc 2013 eric lemes - integracoes entre sistemas-2
Tdc 2013   eric lemes - integracoes entre sistemas-2Tdc 2013   eric lemes - integracoes entre sistemas-2
Tdc 2013 eric lemes - integracoes entre sistemas-2
 
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
Aplicações multicore com Linux Embarcado usando Raspberry Pi 2 - TDC2015
 
Introdução ao NodeJS
Introdução ao NodeJSIntrodução ao NodeJS
Introdução ao NodeJS
 
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux EmbarcadoTDC2016 - Explorando Qt5 e Python em Linux Embarcado
TDC2016 - Explorando Qt5 e Python em Linux Embarcado
 
Bruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisBruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveis
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
SI - Comunicação
SI - ComunicaçãoSI - Comunicação
SI - Comunicação
 

Tdc2012 java e amqp - uma alternativa ao jms

  • 1. Trilha – Java EE Java e AMQP: Uma alternativa ao JMS Luciano Davoglio Molinari lucmolinari@gmail.com @LucMolinari http://lucianomolinari.wordpress.com Globalcode – Open4education
  • 2. Agenda Mensageria Modelos JMS AMQP AMQP x JMS Rabbit MQ Integração Java x AMQP (Demo) 2 Globalcode – Open4education
  • 3. Mensageria Sistemas heterogênios Baixo acomplamento Assíncrono Confiabilidade/Escalabilidade/Distribuição Comunicação através de um MOM (Message- Oriented-Middleware) 3 Globalcode – Open4education
  • 4. Mensageria - MOM Implementação do protocolo Armazenamento Disponibilidade/performance Roteamento 4 Globalcode – Open4education
  • 5. Mensageria Escreve Recebe Sistema A Mensagem MOM Sistema B Mensagem 5 Globalcode – Open4education
  • 6. Mensageria - Restrições Novo componente na arquitetura (MOM) Nativamente assíncrono Mais de 1 padrão (JMS, MSMQ, AMQP) 6 Globalcode – Open4education
  • 7. Modelo Point-to-Point Uso de filas Apenas 1 consumidor 1 ou mais produtores Armazena as mensagens em uma fila Produtor 1 Escreve Recebe … Mensagem MOM Consumidor Mensagem Produtor N 7 Globalcode – Open4education
  • 8. Publish/Subscribe Uso de tópico 1 ou mais consumidores 1 ou mais produtores Produtor 1 Consumidor 1 Escreve Recebe … Mensagem MOM … Mensagem Produtor N Consumidor N Armazena as mensagens em um tópico 8 Globalcode – Open4education
  • 9. 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
  • 10. JMS - Restrições Padroniza somente a API Cada implementação define seu próprio protocolo Interoperabilidade dentro da plataforma Java 10 Globalcode – Open4education
  • 11. 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
  • 12. AMQP Protocolo aberto Padronizado Interoperável (realmente!) Confiável Cases de missão crítica (financeiro, telecom) 12 Globalcode – Open4education
  • 13. AMQP – Fluxo mensagem • Mensagens são sempre enviadas para exchanges • Queues são conectadas à exchanges através de bindings Prod. 1 Q1 Cons. 1 Exchange 1 … Q2 Cons. 2 Prod. N Broker 13 Globalcode – Open4education
  • 14. AMQP – Exchange Types Direct Fanout Topic Header 14 Globalcode – Open4education
  • 15. Direct Exchange • Binding deve casar exatamente com a routing key Routing key pode ser vazia Parecido com o modelo point-to-point (Queue) do JMS Prod. 1 Exchange 1 … Q1 Cons. 1 Prod. N Broker 15 Globalcode – Open4education
  • 16. 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 Q1 Cons. 1 Exchange 1 … Q2 Cons. 2 Prod. N Broker 16 Globalcode – Open4education
  • 17. Topic Exchange Suporta routing-key Parecido com Direct, mas suporta wildcard nas routing keys Parecido com o modelo Pub/Sub do JMS com seletor de mensagem Prod. 1 y 1.* Q1 Cons. 1 e *.k Exchange 1 … Key 2.# Q2 Cons. 2 Prod. N Broker 17 Globalcode – Open4education
  • 18. Header Exchange Parecido com Topic Exchange Não suporta routing key Roteamento é feito através de atributos do cabeçalho (header) Menos usado 18 Globalcode – Open4education
  • 19. AMQP/JMS AMQP JMS JMS Padronização à nível de protocolo Padronização à nível de API Interoperabildade Interoperabilidade (Java) Mensagem formada por header, Mensagem formada por header, properties e body 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 mensagem 19 Globalcode – Open4education
  • 20. Rabbit MQ Sistema de mensageria AMQP Robusto Cluster/Alta disponibilidade Interface WEB de gerenciamento Base de dados interna Multi-plataforma (SO) Multi-plataforma (Linguagens) 20 Globalcode – Open4education
  • 21. Rabbit MQ Open source e suporte comercial Escrito em Erlang Mantido pela SpringSource/VMWare Rápido (Muito!) Leve Usado fortemente na nuvem (EC2) 21 Globalcode – Open4education
  • 22. Integração Java x AMQP Própria biblioteca do RabbitMQ Vários exemplos no site oficial Spring AMQP Mesma forma de trabalho simplificada. 22 Globalcode – Open4education
  • 23. 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(); } } 23 Globalcode – Open4education
  • 24. Spring AMQP Demo 24 Globalcode – Open4education
  • 25. Dúvidas? Luciano Davoglio Molinari E-mail: lucmolinari@gmail.com Twitter: @LucMolinari http://lucianomolinari.wordpress.com Globalcode – Open4education