RabbitMQ- assegurar mensagem de transmissão confiável

 

resumo:

Falando confiabilidade de entrega da mensagem, não pode ser evitado, frequentemente encontrados em trabalhos práticos, tais como a necessidade de proteger algumas das mensagens core business não são perdidos

 

  • O primeiro cenário (estado registros de dados muda a forma):

 

  • Passo 1: Em primeiro lugar, as informações da mensagem (dados de serviço) armazenados no banco de dados, imediatamente, então podemos também ser armazenados no registro de mensagem (ou outra tabela de registro de mensagem de uma homologia de banco de dados) uma lista de mensagens gravadas
  • Passo 2: MQ Broker envia uma mensagem para o nó (usando confirmar o envio, o resultado será devolvido assíncrono)
  • Passo 3,4: final Produtor de MQ Broker receber nó devolve uma mensagem de reconhecimento de confirmar os resultados, então a actualização da tabela ficha mensagem do estado da mensagem. Por exemplo, Estado Default = 0 Ao receber a mensagem de confirmação de sucesso, atualizá-lo para 1!
  • Passo 5: Na mensagem de reconhecimento, mas o processo pode ser devido a problemas da rede, MQ Broker provoca anormal mensagem de fim de eco falhou ou anormal. Desta vez, precisamos que o remetente (produtor) para a confiabilidade de entrega de mensagens, e garantir a mensagem não está perdido, sucesso de 100% de entrega! (Não é um caso extremo de flash, retornar com sucesso uma mensagem de confirmação Broker, mas o lado da produção devido a falhas de rede não recebeu, desta vez para re-entrega pode resultar em mensagens duplicadas, tais como poder de processamento necessário para fazer o lado do consumidor) por isso precisamos ter um tarefa de temporização (por exemplo, a cada 5 minutos a puxar em uma mensagem de estado intermediário, é claro, a mensagem pode definir um período de tempo, tal como mais do que um estado minuto = 0, isso significa que, dentro de um minuto desta janela de tempo, a mensagem não é nossa confirmada, ele vai ser puxado para fora da tarefa agendada)
  • Passo 6: Em seguida, colocar a mensagem intermediária estado re-entrega tentativas de envio, continuar a enviar uma mensagem para MQ, é claro, também pode levar a uma variedade de razões não conseguiu enviar
  • Passo 7: Podemos definir o número máximo de esforços para tentar adoptar, tais como entrega de três vezes, ou fracasso, então podemos acabar estado está definido para Status = 2, e, finalmente, entregue ao tipo artificial de processo de resolução de problema (ou a mensagens de despejo a falhar tabela).
  •  

 

  •  A segunda opção (mecanismo de consulta + compensação de atraso):

Em primeiro lugar, quanto menor os módulos figura representam significados:

Upstream serviço representa o lado da produção;

Serviço jusante representa o lado do consumidor;

MQ corretor pode ser um cluster MQ;

Callback Serviço representa um serviço de retorno de chamada;

Ou em ordem, por exemplo.

  • Passo: Primeiro armazém negócio de ordem, em seguida, enviar a mensagem para uma fila de 1 corretor terminal. Note-se que desta vez, eu não, então mensagem de ordem I e armazenados em outro banco de dados, onde apenas uma vez a operação de armazenamento.
  • Passo: O primeiro passo depois do envio de uma mensagem, definir um tempo de atraso, tal como cinco minutos, para enviar a mensagem outra vez, a mensagem é enviada para o terminal de corretor fila 2;
  • O terceiro passo: o consumidor final para monitorizar uma fila específica, o consumo de processamento de mensagens;
  • Passo quatro: Após a conclusão da notícia consumidor final realmente lidar, mas também a sua própria interno re-gerar uma nova mensagem chamada uma confirmação de envio confirmar. Confirmar esta mensagem de confirmação será enviado para uma fila de 3 terminais corretor.
  • Passo cinco: haverá uma Confirmar serviço de chamada Listener escuta a esta fila de espera 3, se o serviço de chamada de retorno recebido esta mensagem de confirmação do loopback lado do consumidor, o serviço de chamada de retorno no lado do consumidor é considerado dados de consumo de sucesso, essa notícia fez um armazenamento persistente, a mensagem é armazenada no próximo MSG DB.
  • Passo Seis: Cinco minutos depois de atingir a entrega retardada de mensagem corretor terminal 2 fila especificada. Callback Serviço vai ouvir fila 2, fila 2, se a mensagem de atraso chega, o serviço de chamada de retorno irá verificar o banco de dados MSG DB para ver se a mensagem foi consumida consumidor final.

Se houver registros MSG DB, em seguida, o serviço de retorno de chamada não faz nada.

Se o registro não existe MSG DB, o consumidor não tem nenhuma explicação ou dados de resposta é devolvido no processo de retorno devido a falha de rede faz com que o retorno, então. Callback Serviço irá iniciar a comunicação RPC, o envio de um reenvio do comando (para trazer a mensagem ID), informar o produtor apenas emitiu esta mensagem não for encontrado, re-re-enviados. Em seguida, o primeiro passo é executado repetidamente e, em seguida, o lado da produção.

pontos de entrega de mensagens atrasadas

Atraso de entrega: em comparação com a primeira mensagem de fora do programa de biblioteca que envia uma mensagem para o fim do fim da produção do corretor fila 1, adicionalmente atrasar o envio da mesma mensagem para outro corretor fila terminal 2.

Callback verificar: Se o consumidor final da fila 1 no consumo de dados for bem sucedida, o serviço de retorno de chamada para ouvir a mensagem confirmando o consumidor lado do consumidor, esta mensagem vai persistir no MSG DB. Quando o serviço de retorno de chamada para ouvir o atraso fila de mensagens 2, verifique se há um registro MSG DB. O processo de gravação não é, sem gravação do serviço de chamada de retorno a ser transmitida para a produção de um lado comando reenviar, realizar a primeira operação de corte é repetido.

caso extremo: se o lado do consumidor não voltou para confirmar a mensagem de confirmação, ou serviço de retorno de chamada exceção ocorre quando a atualização MSG DB, como fazer? entrega retardada pode proporcionar mecanismo de compensação. Porque depois de cinco minutos, os serviços de chamada de retorno deve ser capaz de ouvir esta mensagem e, em seguida, ir encontrar a mensagem existe registro MSG DB, para determinar se a necessidade lado da produção para re-enviar a mensagem.

Vantagens atraso de entrega de mensagens

Faça um pouco de armazenamento DB, melhorando o desempenho:

Pode ser o começo, se executado operações de inserção de persistência duas vezes, por segundo até 1000 podem ser simples, mas somente se a persistência, provavelmente 2000 único por segundo, o que é equivalente a salvar um servidor, e isso reduz este dois vezes persistência operações de banco de dados problema pode ocorrer.

mecanismo de compensação assíncrona, proporcionando confiabilidade: dois DB dissociação. Mainstream ligação core: armazenamento de mensagens ordem, ordens de produção envia uma mensagem para o lado do corretor, o consumidor é responsável por monitorar a fila para o consumo. Callback é fornecido um serviço de compensação, vinculá-lo não é o core business do pico, mas vai ser dividido fora como uma mensagem de serviço assíncrono compensação separado.

Resumo: Mensagem de atraso na entrega máxima economia de um dos dados do programa para a operação em queda, e melhorar o desempenho geral de alta concorrência. Ao mesmo tempo, o mecanismo de retorno de chamada assíncrona para compensar o prestador de serviços, de modo que a fiabilidade de produção de entrega lado foi ainda mais protegido.

 

来自< https://cloud.tencent.com/developer/news/370697 >

Publicado 70 artigos originais · ganhou elogios 18 · vê 50000 +

Acho que você gosta

Origin blog.csdn.net/qq_40325734/article/details/105332982
Recomendado
Clasificación