Filas e Mensageria com
RabbitMQ
por Daniel Archer
Daniel Archer
● Sou formado em Análise de Sistemas
● Desenvolvedor PHP há 7 anos
● Participante PHPRS
● Trabalho na KingHost
● Arqueiro nas horas vagas (ah, sério? sim sério)
Zend Certified PHP 5.5
Daniel Archer
● Sou formado em Análise de Sistemas
● Desenvolvedor PHP há 7 anos
● Participante PHPRS
● Trabalho na KingHost
● Arqueiro nas horas vagas (ah, sério? sim sério)
Zend Certified PHP 5.5
Entendendo como funciona
Mensageria
Publisher / Subscriber
Subscriber 1
Publisher Queue
(Fila)
Subscriber 2
Por que usar?
Principais benefícios dessa técnica
Motivos
Comunicação entre servidores e
microsserviços
Transmitir Informações de X para Y
Motivos
Melhoria na performance, removendo
processos pesados da aplicação
Processamento Assíncrono
Comunicação entre servidores e
microsserviços
Transmitir Informações de X para Y
Motivos
Melhoria na performance, removendo
processos pesados da aplicação
Processamento Assíncrono
Possibilidade de escalar facilmente
processos com maior demanda
Escalabilidade
Comunicação entre servidores e
microsserviços
Transmitir Informações de X para Y
Opções do MercadoQuais são as atuais opções de
Message Brokers disponíveis?
(Java)
(Java)
Pub/Sub
(Java)
Brokerless
PerformanceSó para termos uma ideia
Comparativo
Receiver Sender Latency
25.000 msg/s 25.000 msg/s ~200ms
75.000 msg/s 90.000 msg/s ~300ms
180.000 msg/s 180.000 msg/s 0.3ms
600.000 msg/s 5.000.000 msg/s ~120ms
Ref: http://www.bravenewgeek.com/dissecting-message-queues/
Simples, Rápido e Completo
Principais Entidades
Faz a ligação entre os
Exchanges e as Filas
Bindings
Palavra chave que será
utilizada para roteamento
da Mensagem
Route Keys
Responsáveis por receber
as mensagens e enviar
para as filas
Exchanges
Local de armazenamento
das mensagens
Queues
Ref: https://www.cloudamqp.com/blog/2015-09-03-part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html
Na Prática...
Rotina simples de Envio e Recebimento de
mensagens em PHP
Simple Message
Roteando mensagens para várias filas
Exchanges Types
FanOut
Exchange
Logs
(fanout)
Fila1
Fila2
Fila3
FanOut
Exchange
Logs
(fanout)
Fila1
Fila2
Fila3
FanOut
Exchange
Logs
(fanout)
Arquivo
LogStash
EmailAlert
FanOut
Exchange
Logs
(fanout)
Arquivo
LogStash
EmailAlert
Auditoria
Direct
Exchange
Images
(Direct)
images.archive
archiver1
Direct
Exchange
Images
(Direct) cropper
resizer
images.crop
images.resize
images.archive
archiver1
Direct
Exchange
Images
(Direct) cropper
resizer
images.archive
images.crop
images.resize
images.archive
archiver1
archiver2
Topic
Exchange
Logs
(Topic)
{aplicação} . {dispositivo} . {level}
Topic
Exchange
Logs
(Topic)
* . web . *
Fila1
Topic
Exchange
Logs
(Topic) Fila3
* . * . debug
* . web . *
Fila1
Topic
Exchange
Logs
(Topic) Fila3
unipago . #
* . * . debug
* . web . *
Fila1
Fila2
Topic
Exchange
Logs
(Topic) Fila3
Fila4
unipago . #
* . * . debug
unipago . mobile . *
* . web . *
Fila1
Fila2
Em disco ou em memoria?
Persistence vs Durability
Persistence vs Durability
Pode ser durável ou não.
Será deletada após restart do servidor
Fila (Queue)
Pode ser durável ou não.
Será deletado após restart do servidor
Exchange
Pode ser persistente (escrita em disco)
Mensagem
A Mensagem deve ser Persistente
Estar em uma Fila Durável
Ligada a um Exchange Durável
Como garantir?
Recapitulando!
Mensageria
1. Fácil comunicação entre sistemas
2. RabbitMq não é o mais rápido, mas é
suficiente
3. Filas podem ser dinâmicas ou não
4. Vários consumers, várias linguagens
5. Exchange são roteadores, enviando
mensagens para várias filas/exchanges
6. Persistência de Mensagens vs performance
7. Call me Archer!
Obrigado!
Perguntas?
Após a palestra, estarei no estande da KingHost
para tirar dúvidas!

Filas e mensageria com RabbitMQ