Mostrando postagens com marcador AMQP. Mostrar todas as postagens
Mostrando postagens com marcador AMQP. Mostrar todas as postagens

terça-feira, 24 de novembro de 2015

RabbitMQ Exchange

Introdução

    Este artigo vem complementar o rabbitMQ conceitos iniciais escrito recentemente. Como uma séries de artigos referente ao RabbitMQ que irei apresentar no PHPConference dia 04/12/2015

Exchange

    No modelo AMQP, um produtor de mensagem envia mensagens para um exchange, que distribui a mensagens para queues. A exchange é um algorítmo que determina qual queues deve receber a mensagem.

Tipos

    Existe 4 tipos de algorítmos diferentes, que se diferem pelo algoritimo utilizado

Fonout

    É o tipo mais simples. Envia cada mensagem para cada fila ligada a troca.


Direct Exchange

    O Producer identifica a mensagem com uma chave de roteamento, que nada mais é do que uma string que indica o tipo de mensagem. O algoritmo de roteamento se preocupa em levar a mensagem para as filas cuja chave de ligação corresponde exatamente a chave de roteamento da mensagem.











Default Exchange

    Utiliza o nome da fila como chave de ligação. Se um producer envia uma mensagem e a chave de identificação é o nome da fila, por padrão o exchange envia esta mensagem para esta fila. Toda exchange deve ter um nome. Caso ela não o tenha, ela é considerada exchange padrão.

Topic Exchange

    É semelhante a uma troca direta. Entretanto usa chaves separadas por um delimitador, que deve ser uma lista de palavras, delimitada por pontos. As palavras podem ser qualquer coisa, mas geralmente especifícam algumas características ligadas à mensagem. A chave deve estar limitada a 255 bytes.
    
    Estas chaves pode incluir caracteres curingas, como exemplo temos o '#' que substitui uma ou mais palavras; ou '*' substitui exatamente uma palavra.




Headers Exchange

    A AMQP fornece uma headers exchange, que permite consultas símples em headers de uma mensagem. A ligação contém uma lista headers name, propriedades, e argumentos especificando se 'all' (todos os campos de cabeçalho devem corresponder) ou "any" (se qualquer campo corresponder).
Cada AMQP 0-10 corretor contém uma predeclared cabeçalhos trocar amq.match nomeado. Trocas de cabeçalho adicionais podem ser declarados como necessário.
    A AMQP permite implementar tipos de exchange que não estão definidos na norma. Neste caso falamos de Intercâmbios personalizados, eles não são pré-declarados. Para isso, o MRG Messaging fornece um Exchange XML, que pode encaminhar mensagens XML com base em seu conteúdo. As ligações para uma troca XML usar um Xquery, que é aplicada ao conteúdo e cabeçalhos de cada mensagem para determinar se a mensagem deve ser encaminhada.

Veja também RabbitMQ na prática com PHP

Referências

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_MRG/1.1/html/Messaging_User_Guide/chap-Messaging_User_Guide-Exchanges.html

segunda-feira, 16 de novembro de 2015

RabbitMQ Conceitos iniciais

Introdução

    Este artigo é o primeiro de uma série de artigos que pretendo fazer para complementar o material que será apresentado na PHPConference 2015

    O RabbitMQ é um gerenciador de fila assíncrono, seu intuito é basicamente separar os enviadores dos receptores e funcionar como um intermediário de mensagens, garantindo a sua entrega em formato de fila. A mensageria é uma técnica que soluciona a comunicação entre sistemas diferentes de forma confiável, e um Barramento de Mensagens é o mecanismo que coordena o envio e a recepção de mensagens em uma fila.

    AMPQ (Advanced Message Queuing Protocol): É um protocolo sobre o qual trabalha o rabbitMQ, este foi criado para tentar unificar todas as tecnologias envolvidas em um sistema de mensagens, funciona como um protocolo de comunicação em rede, similar ao HTTP.

    Mensageria: sistemas que trocam mensagens por intermédio de um servidor que em geral é chamado de message broker. A razão para sua existência é a baixa confiabilidade das redes que interligam computadores. Este sistema garante que o receptor receberá a mensagem enviada.

    Fila (Queue) - É um buffer que armazena as mensagens dentro do RabbitMQ para ser consumida posteriormente.

    Consumidor (Consumer) - É quem recebe as mensagens,que estão na fila.

    Producer: Aplicações responsáveis por publicar mensagens nos exchanges.

    Exchange: Sua tarefa é receber as mensagens do producer e encaminhar as mensagens para filas;

    Queues: Armazenam as mensagens e encaminham elas para os consumers;

Transmição

    Basicamente uma mensagem é transmitida por 5 passos:

  • Create - O remetente cria a mensagem;
  • Send - O remetente adiciona a mensagem para um canal.
  • Deliver - O sistema de mensagens move a mensagem do computador do remetente para o computador do receptor, tornando-o disponível para o receptor.
  • Receive - O receptor lê a mensagem a partir do canal.
  • Process - O receptor extrai os dados da mensagem.



    Neste diagrama entendemos alguns conceitos:

  • Send and forget: Quando o Seding Application envia a mensagem para o canal de mensagem, uma vez que o envio estiver completo, o remetente não se preocupa mais com a entrega.
  • Store and forward: Ao receber esta mensagem o canal de mensagens grava esta mensagem na memória ou no disco, e disponibiliza ao receptor até que a mensagem chegue ao seu destino.
    Desta forma cada sistema tem sua responsábilidade podendo encapsular da melhor forma sua lógica. Sem ter de se preocupar se a etapa seguinte já aconteceu. Componentes com responsabilidades bem definidas implicam em melhor reutilização.

RabbitMQ

    É uma aplicação open source para troca de mensagens desenvolvida em Erlang, construído no protocolo AMQP, mas também compatível com outros protocolos como HTTP, MQTT e STOMP. O projeto responsável RabbitMQ teve início em 2007 pela empresa Rabbit Technologies Ltd. e, posteriormente, foi incorporado pela VMWare passando a fazer parte da iniciativa Pivotal. O RabbitMQ é composto por três componentes, além do produtor e do consumidor: O Exchange, a Queue e o binding.

Exchange: Sua tarefa é receber as mensagens do producer e encaminhar as mensagens para filas;
Queues: Armazenam as mensagens e encaminham elas para os consumers;

    O exchange recebe a mensagem de um producer e encaminha para as filas de acordo com um critério pré-definido. Esse critério é chamado de binding. O exchange é basicamente um sistema de rotas, que inspeciona a mensagem e usando sua tabela de critérios decide como a encaminhar as mensagens, seja para uma fila de mensagem ou para outro exchange.

    O Canal (Channel) faz a conexão da aplicação cliente com o broker através do protocolo TCP. As conexões usam autenticação e podem usar conexões SSL. Conexões via TCP custam caro para o sistema operacional e, por isso, os canais existem. Os canais, dentro do protocolo AMQP, são “conexões leves que compartilham a mesma conexão TCP”, é necessária apenas uma instância de conexão para executar múltiplas ações.



Continua em RabbitMQ Exchange

Referências