Sobre - MQ

Fila de mensagens (MQ), um método de comunicação aplicação de aplicação. Dados para aplicação de acesso a aplicações e recuperar na fila por escrito (mensagens) para se comunicar, a maioria das aplicações pode ser aumentada através do serviço de mensagens middleware de comunicação assíncrona, a capacidade de expandir dissociados
serviços de mensagens em dois conceitos fundamentais:
1. corretor de mensagens (message broker) e destino (onde você quiser)
2. quando o remetente da mensagem para enviar uma mensagem, a mensagem vai assumir a agência, o agente mensagem para garantir a entrega de mensagens para um destino especificado
de mensagens não é uma chamada de procedimento remoto diretamente, mas através de uma fila de mensagens

Um protocolo de mensagens e comuns
    JMS (Java MessageService) refere-se JMS API é o máximo que se assíncrona tecnologia de mensagens, aplicações Java baseadas sucesso para fornecer um sistema unificado de operações de mensagens especificação de mensagem de JVM, incluindo criar, enviar, a receber
    o JMS e JDBC papel semelhante ao da interface do usuário estão em conformidade com o respectivo serviço e implementa a comunicação JMS, operações relacionadas
    JMS compreende um provedor (JMS de mensagens middleware implementos interface), produtor / editor, consumidor / assinante, mensagem, fila, tópico, etc.
    a partir do final produtor por um consumidor final para alcançar o roteamento de mensagens (-roteamento de mensagens), ligado por um produtor e um consumidor para a mesma fila (p2p) ou tópico (pub / sub) para obter mensagens de roteamento. JMSconsumer apoio seletor de mensagem (seletor de mensagem) por um seletor de mensagem, o consumidor pode consumir apenas aqueles filtrados pelo seletor de mensagem
    mensagem de encaminhamento mecanismo: produtores -> Fila / temas - > consumidor
    fornece dois modelos de mensagem, peer-2 peer (ponto a ponto), publicação-assinatura (publicar e assinar) modelo .
      Quando o ponto de modelo de ponto, uma mensagem será enviada para uma fila, a fila de mensagens só pode ser consumido por um consumidor.
      Quando você publica subscrever modelo, as mensagens podem ser consumidos mais consumidores. Publicar subscrever modelo, completamente produtores e consumidores independentes, não precisa sentir a presença de cada um dos outros
   principais características:
      plataforma Java para a mensagem padrão passando API
      filas e tópicos dois passagem de mensagens modelo
      transações suportes
      podem definir formatos de mensagem (cabeçalho da mensagem, propriedades e conteúdo)
  porções alcançaram JMS API, você pode assumir o papel de provedor JMS, como ActiveMQ, Redis, HornetMQ espera

AMQP
AMQP (avançada o enfileiramento de Message Protocol) Avançada protocolo de enfileiramento de mensagem, é uma mensagem corretor especificação compatível JMS
AMQP é um protocolo é um protocolo de nível de fio de binário (protocolo de ligao). Esta é a essência de sua diferença e JMS, AMQP não definir a camada de API, mas definir diretamente formatos de dados trocados na rede
de modo a alcançar um fornecedor natural de AMQP é multi-plataforma. Você pode usar o provedor de Java AMQP, AQMP pode usar http para fazer uma analogia, não se preocupam com a linguagem, enquanto nós temos que enviar uma mensagem de acordo com o formato de dados correspondente do pedido, um cliente idioma diferente pode ser e as ligações de servidor diferentes idiomas
AMQP mensagem roteamento (messagerouting) e JMS existem algumas diferenças, aumentar o intercâmbio e o papel de ligação no AMQP. produtor envia uma mensagem para o câmbio, decisão vinculativa da mensagem Exchange deve ser enviada para a fila, eo consumidor diretamente da fila de mensagens no consumo. fila e troca de consumidor ligam decidiram
produtor -> troca -> ligação - > fila -> consumidor
produtores de notícias e consumidores de notícias precisa conhecer o outro lado da fila, o produtor mensagem através da chave de Rota e qualquer fila de câmbio de ligação. Rota consumidores de notícias chave começar a partir de qualquer fila Exchange
oferece cinco modelos Mensagem: troca contínua troca, fanout, o tópico de mudança, troca de cabeçalhos, o Exchange System ( o último JMS pub sub modelo de quatro e / não é muita diferença, única é sobre o mecanismo de roteamento para fazer análise mais detalhada)
Principais características:
Independente de plataforma subjacente protocolo de mensagens
interoperabilidade entre plataformas e linguagem, os protocolos subjacentes
Existem cinco tipos de comutação direta, fanout, tema, cabeçalhos, sistema
de cache orientado, de alta performance pode
suportar transações (cross fila de mensagens) para suportar transações distribuídas (XA, o X- / ao ar livre, MS DTC)
modelo AMQP: publicar -> classificando -> Jobs -> consumo -> confirmar o recebimento do MQTT
RabbitMQ AMQP utilizados para alcançar

MQTT
para todos os outros requisitos de aplicação com base no AMQP e JMS para aplicações corporativas Java, MQTT projetado especificamente para dispositivos pequenos
não podem adaptar-se a operações complexas no AMQP não é equipamento de computação de alto desempenho, eles precisam de uma maneira simples e interoperável comunicar. Este é o requisito MQTT básico, agora MQTT é um componente importante das Coisas (IOT) ecossistemas de
características principais:
, baixo uso de memória orientada-stream, para transmitir mensagens curtas entre um pequeno dispositivos silenciosa baixa largura de banda projetados
não suportam longo período loja e para a frente, não suporta transações

em segundo lugar, a composição do intermediário
    componente base
      Broker: mensagem de servidor de filas entidade
      produtor / editor: produtores mensagem
      de consumo: os consumidores mensagem
      tópico: disseminação de temas de informação no âmbito de um modelo de assinatura
      fila: modo PTP, mensagem enviando uma mensagem para uma determinada fila específica produtor, os consumidores se inscrever em fila específica especificado concluída é recebido
      mensagem: um cabeçalho da mensagem e um corpo de mensagem
    RabbitMQ
      conexão: Fi
      câmbio: mudança para receber mensagens para encaminhar as mensagens na fila de servidor (há quatro tipos em: directo (padrão), fanout, tópico, cabeçalhos) diferentes tipos de troca para a frente a estratégia de mensagem tem distinguido
      de ligação: ligação para a associação entre a fila de interruptores e mensagem (isto é, com base em uma rota de ligao o interruptor de chave e mensagem de conexão fila de roteamento regras)
      Channle: multiplexar uma ligação TCP separada multiplexar um trajecto de escoamento de ligação de dados bidireccional, independentemente de publicar fila assinatura mensagem, recebe a mensagem de operação está concluída através destes canais, reduzindo a sobrecarga criada e destruída TCP

Três, mensagens AMQP de roteamento no Exchange
    AMQP roteamento de mensagens de processo e desenvolvedores Java estão familiarizados com JMS existem algumas diferenças, AMQP e encadernação Troca aumento do papel, os produtores enviar mensagens à troca
    , dependendo do tipo de distribuição de mensagens quando o Exchange estratégias de distribuição diferentes, existem quatro tipos: direta, fanout, Tópico, cabeçalhos
    diretos:
      de roteamento de mensagens chaves (chave de roteamento) e se a ligação bingding chave acordo, o interruptor irá enviar uma mensagem para uma fila correspondente e o nome da fila de roteamento chaves exata corresponder
    fanout:
      interruptor fanout não processo de roteamento chaves, simplesmente ligam a fila até o interruptor, cada tipo de switch enviado para as mensagens fanout são atribuídos a todas as filas ligadas,
      todas as filas para cada mensagem enviada para o trocador será encaminhado para a ligação interruptor
    Tópico:
      teclas de correspondência atributo mensagem de atribuição de roteamento, dois wildcard: "*" o símbolo "#" eo símbolo # Corresponde a zero ou mais palavras para combinar uma palavra *

Em quarto lugar, a vantagem de mensagens middleware
    1. A dissociação: mensagens entre os sistemas e o sistema não chamar diretamente as relações, a expansão do sistema não alterar a interface. Reduzir a dependência entre projetos
    2. comunicação assíncrona: um sistema de coordenadas lógico de N pedidos simultâneos para concluir o serviço. Ao chamar um negócio paralelo para melhorar o tempo de resposta do sistema
    3. Protecção contra sobrecarga: o acesso ao sistema é o valor de pico do sistema do negócio não pode funcionar corretamente, e então lentamente pré-existente fila tampão processamento pressão de serviço, o fluxo recorte

Drawback
    1. Reduzir disponibilidade: O mais dependente de sistemas externos introduzidas, mais fácil de pendurar, você tinha uma interface chamada de sistema é o sistema de três BCD muito bem, e agora juntar-se a mq, mq desligou no caso do todo o sistema entrará em colapso
    complexidade 2. aumente o sistema: duplo gastar problema, a mensagem de problema é perdido, a ordem das perguntas de mensagens
    3. consistência: conjunto de processos de negócios sistema ABC em que um de dados inconsistências falha do sistema

Cinco, mensagem mq é perdido
produtores perdido:
     1. Transação maneira: o produtor antes de enviar uma mensagem, abra uma transação channel.txSelect, em seguida, enviar a mensagem. A mensagem RabbitMQ não é recebido com sucesso, a transação de rollback channel.txRollback, em seguida, re-transmitido, e vice-versa cometer o channel.txCommit transação (produtor rendimento e desempenho será muito reduzida)
     mecanismo 2.Confirme (enviar uma confirmação de recebimento): Confirmar de modo está definido nos produtores, é tempo para escrever cada mensagem é atribuído um ID único, e, em seguida, retornará um ACK após o recebimento da RabbitMQ, disse o produtor notícias OK. RabbitMQ se não for tratada com esta mensagem, então há um callback interface de Nack, desta vez o produtor pode reenviar
mecanismo de transação são sincronizados, depois de apresentar uma transação é bloqueado lá.
mecanismo de confirmação é assíncrona, o próximo pode ser enviado após o envio de uma mensagem de uma mensagem e que RabbitMQ mensagem Depois de receber de forma assíncrona callback você uma interface de informar que esta notícia foi recebida
perda de dados RabbitMQ:
      prevenção RabbitMQ próprios dados perdidos, para ser RabbitMQ aberta persistência, após a mensagem é escrita para ser mantidas no disco, mesmo que seja RabbitMQ se desligou os dados armazenados anteriormente lerá automaticamente após a recuperação, os dados gerais não serão perdidos
     raro é, RabbitMQ não persistente, e que eles Hung up, pode resultar em uma pequena quantidade de dados serão perdidos, mas a probabilidade é pequena
     persistência + confirmar o mecanismo com o produtor, somente após a mensagem foi para o disco, informará a persistência produtor ack, por isso mesmo na persistência de antes do disco, RabbitMQ desligou, perda de dados, o produtor não pode receber ACK, mas também a sua possível retransmissão
(deliveryMode a 2)
Consumidor de dados perda :
    o consumo de tempo, apenas para consumir, não tratamento, tais como os resultados do processo de pendurar o reinício, RabbitMQ acho que você é um consumidor, esse dado é perdido
    mecanismo ack fornecido com RabbitMQ, final, se o consumidor não tiver recebido ack em resposta ao consumidor atribuído para a outra extremidade de

seis, a garantia de idempotente (consumo repetido)
    problemas de consumo de duplicação, tal como o lado do consumidor não é consumido ack mq pendurados no lado do consumidor é repetidamente transmitido após actual começa consumo repetido.
    Solução:
    1. Os produtores enviar mensagens, cada uma adicionando um id exclusivo global, então o momento do consumo, salvar a identificação de Redis dentro. Redis ir para dentro para verificar quando o consumidor sobre o que não está lá, não consumir
    2 operações de banco de dados pode definir uma chave única para evitar a inserção de dados duplicados
    3. Escrever Redis que não há nenhum problema, cada set, idempotency naturais

Sete, o fim do consumo
    como produtores tinha duas mensagens: M1, M2, para garantir que a ordem dessas duas mensagens
    de uma forma simples é enviar M1, M2 ao mesmo servidor, os produtores enviaram após o sucesso de espera M1 enviar M2, de acordo com o primeiro a ser atingido primeiro princípio do consumo, M1 para M2 primeiro será consumido, garantindo assim a ordem das mensagens
    demorado se o envio demorada do que a transmissão M2 M1, então M2 continuará a ser o primeiro consumidor, não pode a fim de garantir que a mensagem é determinado para ter sucesso recorrência M1 M2, mecanismo de repetição
   de sequência de mensagem consistente quando a mesma ordem de mensagem curta de tempo é armazenado e mantido o envio, a mensagem é armazenada e mantida consumo de

oito, a consistência mensagem
    de ordem criando um exemplo: gerar ordens, ordens de processo, tais como processamento de pedidos for bem sucedido, as razões ou devido a rede downtime MQ, a mensagem não foi enviada estatuto do partido inalterado
    1. selecione middleware mensagens transacionais, para garantir que as mensagens geradas por transações locais o sucesso final da consistência da mensagem enviada com sucesso
     pré-transação mecanismo de entrega da mensagem é realmente semelhante ao candidaturas em duas fases, a única diferença é que o lado do consumidor, como consumidor Sem sucesso não irá desencadear uma reversão porque a mensagem filas de dados persistentes através de mecanismo de repetição MQ até bem sucedida do consumidor
    2. noticiário local
     na implementação de operações de negócios, gravou uma mensagem de dados para o DB e dados de mensagens e registros de negócios gravação de dados deve ser concluída dentro da mesma transação
     , após a conclusão da gravação dos dados da mensagem, podemos depois por uma tarefa programada em rotação para a mensagem de status DB para ser enviado, em seguida, a mensagem será entregue ao MQ

Nine, alta disponibilidade

 

Acho que você gosta

Origin www.cnblogs.com/webster1/p/12520611.html
Recomendado
Clasificación