Tirando o coelho da cartola: integrando sistemas com RabbitMQ

40
Tirando o coelho da cartola Integrando sistemas com RabbitMQ

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

Page 1: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Tirando o coelho da cartola

Integrando sistemas com RabbitMQ

Page 2: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Quem sou eu

❖ Programador PHP!

❖ Twitter: @nelson_senna!

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

Page 3: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Por que integrar?

Page 4: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Como podemos integrar sistemas?

Page 5: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Opções conhecidas

❖ Integração com arquivos;!

❖ Banco de dados compartilhado;!

❖ Remote Procedure Call (RPC);

Page 6: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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.

Page 7: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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”;

Page 8: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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…);

Page 9: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

É… E…? Fodeu, então?

Page 10: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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

Page 11: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Mensagens

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

❖ Mecanismo de “retry”;!

❖ Assíncrono;!

❖ RabbitMQ!

Page 12: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Por que o RabbitMQ?

Page 13: Tirando o coelho da cartola: integrando sistemas com 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;

Page 14: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

E como funciona?

Page 15: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Protocolo AMQP

Producer Exchange Queue Consumermensagem

binding

resposta

mensagem

RabbitMQ

Page 16: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

AMQP: Componentes

❖ Exchanges;!

❖ Message Queues (Filas);!

❖ Bindings;!

❖ Channel (Canal);!

❖ Virtual Hosts;

Page 17: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Exchange?

Page 18: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Exchanges padrão

❖ Default;!

❖ Direct;!

❖ Fanout;!

❖ Topic;!

❖ Headers;

Page 19: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Default exchange

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

❖ Útil para pequenas aplicações;

Page 20: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Direct exchange

exchange

q1

q2

q3

routing_key: key1

routing_key: key2

routing_key: key3

Page 21: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Fanout exchange

exchange

q1

q2

q3

Page 22: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Topic exchange

Page 23: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Headers exchange

❖ Direct exchanges with lasers;!

❖ Mais de um critério para encaminhamento;

Page 24: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

E a fila faz o que?

Page 25: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Propriedades da fila

❖ Exclusiva ou compartilhada;!

❖ Durável ou temporária;!

❖ Nomeada pelo cliente ou pelo servidor;

Page 26: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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

Page 27: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Bindings ligam exchanges às filas!

Page 28: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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

Page 29: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Claro! Os canais possibilitam isso!

Page 30: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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

aplicações vai ficar complicado de gerenciar…

Page 31: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

É… vai mesmo…

Page 32: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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

Page 33: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Falou de tudo, menos de mensagem…

Page 34: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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”.

Page 35: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

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

Page 36: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Criando seu producer

Page 37: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Criando seu consumer

Page 38: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Fácil, hã?

Page 39: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Dúvidas?

Page 40: Tirando o coelho da cartola: integrando sistemas com RabbitMQ

Muito obrigado!