RabbitMQ site oficial: https://www.rabbitmq.com
-
esboço
Na maioria das aplicações, o sistema de comunicação assíncrona para melhorar o serviço através do middleware mensagem, estendeu dissociação capacidade.
- Serviços de mensagens em dois conceitos-chave:
- corretor de mensagens (message broker) e um destino (onde você quiser) Quando o remetente da mensagem para enviar a mensagem, tomado pelo corretor mensagem, o corretor mensagem para garantir que a mensagem para o destino especificado.
- Há duas formas principais da fila de mensagens do destino
- Fila (fila): mensagens peer (ponto-a-ponto)
- Theme (tema): publicação (publicar) / subscribe (inscrever) de mensagens
- Ponto a ponto:
- remetente da mensagem para enviar uma mensagem, o corretor mensagem de colocá-lo em uma fila, o destinatário da mensagem recebe o conteúdo da mensagem da fila, a mensagem é lida da fila depois que a mensagem tem apenas um emissor e receptor, mas não significa que só pode haver um destinatário
- Publicado inscrever:
- O remetente (editor) envia uma mensagem para o tema, vários destinatários (assinantes) de escuta (subscrever) este tema, ele receberá uma mensagem, ao mesmo tempo quando uma mensagem chega
- JMS (Java Message Service) Java Message Service:
- especificação JVM é baseado no message broker. ActiveMQ, HornetMQ é a implementação JMS
- AMQP (Advanced Message Protocol Queuing)
- Advanced Message Queuing Protocol, é um message broker especificação compatível com JMS RabbitMQ AMQP é alcançar uma
-
JMS e AMQP comparar
|
ETC. |
AMQP |
definições |
fogo Java |
protocolo de rede de nível de linha |
Cross-language |
não |
é |
Multi-plataforma |
não |
é |
Modelo |
Oferece dois modelos de mensagens: (1), ponto-2-Peer (2), Pub / sub |
Oferece cinco modelos Mensagem: (1), troca directa (2), permuta Fanout (3), a mudança tópico (4), permuta cabeçalhos (5), sistema de troca Essencialmente, o pub / sub modelo últimos quatro anos e JMS não é muita diferença, apenas para fazer uma análise mais detalhada sobre o mecanismo de roteamento; |
tipo de mensagem apoio |
Vários tipos de mensagens: Mensagem de texto MapMessage Alterar Mensagem StreamMessage ObjectMessage Mensagem (apenas o cabeçalho da mensagem e propriedades) |
byte[] Quando a aplicação real, tem uma mensagem complexa, a mensagem pode ser enviada após a serialização. |
Avaliação abrangente |
JMS define padrão de nível API JAVA; no sistema de java, vários clientes podem interagir tanto através de JMS, não precisa modificar o código do aplicativo, mas seu fraco suporte para multi-plataforma; |
AMQP define uma camada de protocolo de nível de arame padrão;-plataforma natural cruzada, transversal de língua apresenta. |
-
RabbitMQ Perfil
- perfil RabbitMQ:
RabbitMQ é um erlang desenvolvido pela AMQP (advanved Message Protocol Queue) é uma implementação open source.
- O conceito mensagem central
Mensagem, a mensagem é anônima, que consiste de um cabeçalho da mensagem e um corpo de mensagem. O corpo da mensagem é opaco, e o cabeçalho da mensagem através de uma série de atributos opcionais, esses atributos incluem encaminhamento-chave (teclas de encaminhamento), prioridade (prioridade relativa a outra mensagem), do modo de entrega (o que indica que a mensagem pode precisar armazenamento persistente) e assim por diante.
- Editor
A mensagem produtores aplicativo cliente, também emitiu uma mensagem para o switch.
- Troca
Mudar, para receber uma mensagem enviada pelo produtor e para encaminhar as mensagens para as filas do servidor. Troca Existem quatro tipos: direta (padrão), fanout, tópico e cabeçalhos, encaminhamento de mensagens de diferentes tipos de políticas de câmbio diferem
- Fila
filas de mensagens, usado para guardar as mensagens enviadas, até ao consumidor. É um recipiente para a mensagem, a mensagem é o fim. Uma mensagem pode ser colocado em uma ou mais filas. Mensagem tem sido no interior fila, à espera de consumidores para se conectar à fila irá removê-lo.
- Obrigatório
A ligao de uma associação entre a fila de mensagens e os interruptores. A ligação é uma regra de encaminhamento com base em chave e o interruptor de ligação da fila de mensagem, o comutador pode ser entendida para ser uma tabela de encaminhamento constituído pela ligação. Filas do Exchange e de ligação podem ser muitos para muitos relação.
- Conexão
conexão de rede, como uma conexão TCP.
- Canal
Canal, uma ligação de dados do canal de fluxo de multiplexagem independente bidireccional. conexão virtual canal é estabelecido nas conexões reais TCP, comandos AMQP são enviados através do canal, se é anunciado que a fila de subscrição ou receber mensagens, essas ações são feitas através do canal. Desde a criação de TCP e destruição são sobrecarga muito caro para o sistema operativo, de modo que a introdução da noção do canal, a fim de reutilizar uma ligação TCP.
- Consumidor
mensagem consumidores indicando um aplicativo cliente para obter informações da fila de mensagens.
- host Virtual
Web hosting, representa um grupo de interruptores, filas de mensagens e objetos relacionados. Web hosting é compartilhada o mesmo ambiente de autenticação e criptografia de domínio do servidor stand-alone. É essencialmente uma mini versão do servidor RabbitMQ, com a sua própria fila, interruptores, mecanismos e permissões de ligação para cada vhost. AMQP é a base do conceito de vhost deve ser especificado no momento da conexão, RabbitMQ é o vhost padrão /.
- Corretor
entidade servidor Message Queue representa
-
mecanismo operacional RabbitMQ
-
O AMQP roteamento de mensagens
AMQP processo de roteamento de mensagens e desenvolvedores Java estão familiarizados com JMS existem algumas diferenças, AMQP adicionado ao Exchange e do papel de vinculação. Produtores colocar a mensagem postada na Bolsa, a fila de mensagens e, eventualmente, atingir o consumidor recebe, e decisão de mudar a mensagem de ligação deve ser enviada para a fila.
-
Tipo de câmbio
Há Exchange quando distribuição de mensagens, dependendo do tipo de diferenças de políticas de distribuição, havia quatro tipos: direto, fanout, tópico, cabeçalhos. cabeçalhos de mensagens AMQP corresponder exatamente o cabeçalho de roteamento em vez de chaves, interruptores e cabeçalhos de troca direta, mas o desempenho é ruim muito, quase não é usado mais, então um olhar direto mais em três tipos:
1), dirigir Troca
roteamento de mensagens Key (chave de roteamento), e se a chave de ligação Ligação interruptor consistente irá enviar uma mensagem para uma fila correspondente. chaves de roteamento exato coincidir com o nome da fila, se a fila está ligado a um interruptor de chave como na rota alegação de "cão", só para a frente o roteamento de mensagens chave rotulado como "cão" e não encaminhado "dog.puppy", e não entregar " dog.guard "e assim por diante. É uma correspondência exata, o modo unicast.
2), FANOUT Troca
Cada switch cabelo tipos de mensagens fanout são atribuídos a todas as filas ligada. interruptor fanout não processa as teclas de roteamento, simplesmente ligam para as filas de switch, cada mensagem enviada para o trocador será encaminhada para todas as filas ligados com o interruptor. Muito parecido com a transmissão de sub-rede, os hosts em cada sub-rede ter recebido uma cópia da mensagem. Tipo fanout de encaminhamento da mensagem é o mais rápido.
3), tópico Troca
combinando o modo de comutação tópico roteamento chave da mensagem alocação de atributo, a chave de roteamento e uma correspondência de padrão, as necessidades de caso para se ligar a um modo de fila. Ele vai cortar a corda roteamento chaves e combinações de teclas em palavras, essas palavras são separadas por pontos. Ele também irá identificar dois wildcards: o símbolo "#" e o símbolo "*". # Corresponde a zero ou mais palavras, * corresponde a uma palavra.
-
testes de instalação RabbitMQ
-
instalação RabbitMQ
1), a utilização de janela de encaixe espelho RabbitMQ montagem
[root@localhost ~]# docker pull rabbitmq:3-management
2), o espelho de partida RabbitMQ
[root@localhost ~]# docker run -d -p 5672:5672 -p 15672:15672 --name myRabbitMq 985adbf1306
-d: fundo ;-p: 5672 de mapeamento da porta de mapeamento da porta de acolhimento para recipiente de porta janela de encaixe, que é a porta do interface de gestão de cliente e 15672 RabbitMQ comunicação da porta; - nome: o nome do actualmente em execução; 985adbf1306 (IMAGEM ID)
3), página RabbitMQ gerenciamento de acesso
nome de usuário, senha de hóspedes
-
teste RabbitMQ
1), esquemas de mensagens RabbitMQ
2) Criar trocadores de trocar
exchange.direct, exchange.fanout, exchange.topic
3) criar filas de mensagens Filas
olá, hello.news, hello.emps, helloWorld.news
4), e muda a fila de ligao
A fila de trabalho e comutadores devem ser obrigatório
Respectivamente alternar exchange.direct, exchange.fanout, exchange.topic respectivamente, são ligados olá, hello.news, hello.emps, helloWorld.news
regras vinculativas de Tópico não são os mesmos
5), envia uma mensagem para a fila de mensagens
- interruptor exchange.direct envia uma mensagem
- interruptor exchange.fanout envia uma mensagem
- interruptor exchange.topic envia uma mensagem
-
SpringBoot integrar RabbitMQ
1) Criar um projeto SpringBoot