tirando o coelho da cartola: integrando sistemas com rabbitmq

40
Tirando o coelho da cartola Integrando sistemas com RabbitMQ

Upload: nelson-senna-do-amaral

Post on 28-Dec-2014

615 views

Category:

Technology


4 download

DESCRIPTION

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

TRANSCRIPT

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!