Filas e Mensageria

O que é e como utilizar

Marcela Godoy

InterCon 2018

Marcela Godoy

Software Engineer @ PayCertify

Coorganizadora do PHPSP Campinas

Mentora de Mulheres na Tecnologia

❤️📖☕

& Coxinha de Jaca

@magodoy88

Comunicação

Destinatário

Remetente

Mensagem

  • Confirmar chegada;

  • Resposta única;

  • Múltiplas respostas.

Nosso modelo de comunicação é muito semelhante com a comunicação das aplicações que criamos.

Client

Server

Request

Response

"Síncrono e Assíncrono são termos referentes ao fluxo de uma aplicação"

Síncrono

Comprar um ingresso

Enviar confirmação

Processar pagamento

Enviar o ingresso

Assíncrono

Comprar um ingresso

Enviar confirmação

Processar pagamento

Enviar o ingresso

Publisher

Message Broker

Consumer

Uma nova forma de se comunicar...

(remetente)

(destinatário)

Mas... porque?

Comunicação facilitada entre servidores e microsserviços

Melhoria de performance com processamento assíncrono

Escalabilidade e desacoplamento facilitados

De que se alimenta?

Message Broker

O que é?

Onde vive?

Open Source

AMQP

Advanced Message Queuing Protocol

Interoperabilidade entre serviços

Define os padrões da mensagem

Broker

Exchange

Virtual Host

Queue

Binding

Channel

Consumer

Publisher

Ciclo completo da mensagem

Esse tal

de

RabbitMQ

Open Source

Escrito em Erlang

Grande confiabilidade em sistemas distribuídos

Roda em diversos sistemas operacionais e linguagens

Possui muitos plugins

Topologias

Standalone

Cluster

Topologias

Federation

Instalação

&

Config

O que instalaremos?

* Instalação do RabbitMQ
(Server)

* Instalação do Painel de Gerenciamento
(Plugin)

* Configurações de virtual host e usuário

Mais infos em: http://www.rabbitmq.com/download.html

Acesso em http://<localhost>:15672

Painel de gerenciamento

Configurações de usuário

Nós ❤️ todas as linguagens...

... Mas...

... Nós ❤️❤️❤️❤️PHP!

Criando um Publisher

Utilize a sua linguagem preferida. Vai ter uma lib para ela!

Cria conexão e um channel

Cria sua mensagem e manda pro exchange =)

Criando um Publisher

Queue_declare ( )

'Name' - Nome da fila

'Durable' - Sobreviveremos ao restart?

Criando um Publisher

Queue_declare ( )

'Auto_delete' - O que será de nós após a ultima mensagem?

'Nowait' - Devemos esperar por resposta?

Criando um Consumer

Não esquece da conexão e canal!

Vamos consumir os itens da fila

Enquanto isso, no message broker...

A escolha de um exchange

Declaração do Exchange

 

Fanout Exchange

 

Exchange

Queues

Direct Exchange

 

Exchange

Queues

Archive

Crop

Resize

Topic Exchange

 

Exchange

Queues

*.web

*.log

*.email

Headers Exchange

 

Exchange

Queues

Archive

Crop

Resize

Utilize as informações do header como routing key

Algumas soluções interessantes...

Dead Letter

Exchange

Publisher

Queue

Consumer

Exchange

Reject Queue

Multi-propósito

Exchange

Publisher

Queue

Consumer

Queue

Queue

Cloud

Email

DB

Delayed Message

Exchange

Publisher

Delay Queue

Exchange

Queue

Para saber mais...

http://www.rabbitmq.com/getstarted.html

#Obrigada

Dev PHP ou Ruby?
Temos vagas!

#FalaComigo

#MandaOi

@magodoy88

helloworld@marcelagodoy.net

Made with Slides.com