Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Post on 28-Dec-2014

615 views 4 download

description

View of AMQP protocol in details and how to use PECL AMQP library to send and consume messages using RabbitMQ.

Transcript of Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Tirando o coelho da cartola

Integrando sistemas com RabbitMQ

Quem sou eu

❖ Programador PHP!

❖ Twitter: @nelson_senna!

❖ Blog: http://nelsonsar.github.io

Por que integrar?

Como podemos integrar sistemas?

Opções conhecidas

❖ Integração com arquivos;!

❖ Banco de dados compartilhado;!

❖ Remote Procedure Call (RPC);

Integração com arquivos❖ Formatos que tem suporte para múltiplas linguagens e múltiplas plataformas

(CSV, JSON, XML, etc);!

❖ Fraco acoplamento entre sistemas que precisam ser integrados;!

❖ Nome, tempo de atualização e remoção precisam ser acordados entre as aplicações;!

❖ Implementação de como processar o arquivo em cada aplicação;!

❖ Concorrência leitura e escrita;!

❖ Aplicações acessando o mesmo disco ou transferência de arquivos entre discos;!

❖ Alta probabilidade dos sistemas ficarem fora de sincronia e de conflitos de dados.

Banco de dados compartilhado❖ Consistência entre os dados;!

❖ Concorrência feita através do sistema de transação do banco de dados;!

❖ Uso da linguagem SQL para integração;!

❖ Estrutura que satisfaça todas as aplicações envolvidas na integração;!

❖ Distribuir o banco de dados;!

❖ Performance prejudicada devido a vários “locks”;!

❖ “Deadlock”;

Remote Procedure Call (RPC)

❖ Permite a construção de aplicações responsáveis pelos dados que elas mantém;!

❖ Capacidade de prover múltiplas interfaces para um mesmo dado;!

❖ Produz acoplamento entre as aplicações envolvidas na integração;!

❖ Requisições síncronas (Não necessariamente…);

É… E…? Fodeu, então?

Não! É pra isso que eu estou aqui!

Mensagens

❖ Acoplamento entre as aplicações tendendo a zero;!

❖ Mecanismo de “retry”;!

❖ Assíncrono;!

❖ RabbitMQ!

Por que o RabbitMQ?

❖ Fácil de instalar;!

❖ Fácil de monitorar;!

❖ Fácil de usar;!

❖ “Clustering” dinâmico, fácil de criar e manter;!

❖ Documentação excelente;!

❖ Utiliza o protocolo AMQP e não o utiliza quando o assunto é performance;!

❖ Plugins;!

❖ Extensão PECL e phpamqp-lib;!

❖ Open source;!

❖ Suporte comercial;

E como funciona?

Protocolo AMQP

Producer Exchange Queue Consumermensagem

binding

resposta

mensagem

RabbitMQ

AMQP: Componentes

❖ Exchanges;!

❖ Message Queues (Filas);!

❖ Bindings;!

❖ Channel (Canal);!

❖ Virtual Hosts;

Exchange?

Exchanges padrão

❖ Default;!

❖ Direct;!

❖ Fanout;!

❖ Topic;!

❖ Headers;

Default exchange

❖ Otimização no código do RabbitMQ (mais rápida que as demais);!

❖ Útil para pequenas aplicações;

Direct exchange

exchange

q1

q2

q3

routing_key: key1

routing_key: key2

routing_key: key3

Fanout exchange

exchange

q1

q2

q3

Topic exchange

Headers exchange

❖ Direct exchanges with lasers;!

❖ Mais de um critério para encaminhamento;

E a fila faz o que?

Propriedades da fila

❖ Exclusiva ou compartilhada;!

❖ Durável ou temporária;!

❖ Nomeada pelo cliente ou pelo servidor;

E como o exchange sabe para qual fila entregar a mensagem?

Bindings ligam exchanges às filas!

Posso ter várias conexões ao mesmo tempo?

Claro! Os canais possibilitam isso!

É, mas, se eu tiver que ter uma instância do RabbitMQ para cada uma das minhas

aplicações vai ficar complicado de gerenciar…

É… vai mesmo…

Sorte que não precisa! Você pode ter vários virtual hosts, uma para cada aplicação!

Falou de tudo, menos de mensagem…

AMQP: Mensagens

❖ Criadas pelo “producer”;!

❖ Roteadas pelo exchange e entregues às filas (ou não…);!

❖ Filas encaminham a mensagem aos “consumers”;!

❖ Podem ser persistidas em disco (Mas, você não vai querer fazer isso…);!

❖ Podem ser aceitas ou rejeitadas pelo “consumer”.

Ótimo! Agora só falta me provar que é fácil de usar, né?

Criando seu producer

Criando seu consumer

Fácil, hã?

Dúvidas?

Muito obrigado!