Protocolo aberto da camada de aplicação para comunicação entre clientes e brokers de mensagens. Executa sobre o TCP, com payloads binários.
- publisher: processo que publica mensagens;
- exchange: "mailboxes" onde as mensagens são publicadas;
- queue: fila de destino das mensagens;
- broker: responsável por rotear cópias das mensagens publicadas a uma exchanges para todas as queues que vinculadas a essa exchange.
- consumer: um ou mais processos que consomem as mensagens de uma queue;
- connection: representa uma conexão TCP com o broker. Tanto a conexão de publisher quanto a do consumer são bi-direcionais;
- channel: abstrai uma conexão entre o publisher e uma exchange. Vários channels podem ser abertos sobre a mesma conexão TCP para evitar consumo de recursos do SO.
Atributos de uma mensagem:
- Routing Key (opcional): uma string usada no roteamento da mensagem;
- Payload;
- Content-type;
- Encoding;
- Durabilidade da entrega (persistente ou não);
- timestamp da publicação;
- prioridade (para filas de prioridade);
Atributos importantes de uma exchange:
- name;
- durability (sobreviver ou não a restarts do broker);
- auto-delete (indica se a exchange deve ser deletada se não houver mais filas associdadas);
AMQP suporte 4 tipos de exchanges:
-
Direct
- roteia mensagens de acordo com a routing key
- comunicação unicast
- Algoritmo: quando uma fila se vincula a uma exchange direct, ela fornece sua routing key. Toda mensagem direcionada para a exchange contendo a routing key da fila, será direcionada para ela.
- Executa um round robin entre consumidores da mesma fila.
Há uma exchange direct default em que toda fila é vinculada automaticamente com uma routing key do mesmo nome da fila.
-
Fanout
- roteia cópias da mensagem para todas as filas vinculadas à exchange;
- comunicação broadcast/multicast;
-
Topic
- Roteia mensagens com base em um padrão de routing key.
- Pode fazer comunicação unicast ou multicast;
-
Header Ignora a routing key e usa o conteúdo da mensagem para decidir a(s) fila(s) de destino.
Atributos importantes de uma queue:
- name;
- durability (sobreviver ou não a restarts do broker);
- exclusive: se a fila é exclusiva, ela é usada somente por um consumidor e é removida quando o consumidor desconecta;
- auto-delete (indica se a fila deve ser deletada se não houver mais consumidores conectados)
- TTL: tempo que uma mensagem permanece na fila antes de ser descartada, caso não seja consumida dentro deste intervalo.
- length: número máximo de mensagens. Após esse tamanho, a fila começa a descartar as mensagens mais antigas;
A ordem das mensagens é garantida dentro de uma fila (a menos que ela seja uma priority queue ou sharded).
- Toda fila deve ser vinculada a uma exchange. Caso não seja, fornecida, a exchange default é utilizada.
- No binding é fornecido a routing key da fila. Uma fila pode ser vinculada a mais de uma exchange.
Como sistemas distribuídos podem falhas, um broker AMQP só remove uma mensagem de uma fila de saída quando o consumidor envia um ACK indicando o sucesso. O ack pode ser no momento de entrega ou manual.
Quando uma mensagem não podo ser consumida pelo consumidor, este pode rejeitar a mensagem ou devolvê-la pra fila para ser consumida novamente. Ao ser rejeitada, a mensagem pode ser descartada ou enviada para uma fila de dead letters, conforme configurado pelo consumidor.
No AMQP toda configuração é feita por publishers e consumers, criação de filas, exchanges e mensagens. Isso elimina a configuração do broker mas pode levar conflitos de configuração.
Quando um consumer se conecta em uma fila, ele diz quantas mensagens ele é capaz de consumir ao mesmo tempo. Essa quantidade é conhecida como prefetch count.


