Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 26359|Resposta: 2

Uma análise aprofundada do mecanismo de resposta às mensagens do RabbitMQ

[Copiar link]
Publicado em 30/03/2018 10:42:59 | | | |


Quando o consumidor recebe a mensagem e a tarefa de processamento é concluída, ele enviará um ack com esse identificador de mensagem para informar ao servidor que a mensagem foi recebida e o processamento está concluído. O RabbitMQ espera até que o link do consumidor que processa uma mensagem seja perdido antes de determinar que a mensagem não foi processada corretamente, então o RabbitMQ retransmite a mensagem.
O confirmante de mensagem está desativado por padrão. Existe um parâmetro noAck ao inicializar o Consumidor,Se configurado como true, o consumidor retornará um ack assim que receber a mensagem


De modo geral, o cenário noack comumente usado é geralmente definido como verdadeiro, mas para projetos com requisitos de alto risco, como pagamento. Para cada mensagem, precisamos garantir sua integridade e correção. Após receber a mensagem, você precisa confirmar que a lógica de negócios correta foi executada e, em seguida, retornar ativamente um ack ao servidor. Você pode visualizar as mensagens na fila pelo comando rabbitmqctl list_queues nome message_rady message_unacknowleded, ou pela interface de gerenciamento em segundo plano.

Se o noAck estiver configurado como falso, o cliente precisa enviar ativamente um ack para o servidor, e se o cliente não confirmar a mensagem, ocorrerá a seguinte situação:



Enquanto o programa estiver em execução, essas 10 mensagens permanecem sem ser executadas e não podem ser reentregues pelo RabbitMQ. O que é ainda mais poderoso é queO consumo de mensagens do RabbitMQ não possui um mecanismo de timeout, ou seja, se o programa não for reiniciado, a mensagem estará sempre no estado Uncked. Não esqueça dessas mensagens de estado desordenado ao trabalhar em eventos de operações.

Pronto

Mensagens com esse status existem na fila para serem processadas.

Não reconhecido

Uma mensagem neste status indica que já está sendo processada, mas não reconhecida.




Quando o programa é fechado (desde que o Consumidor esteja fechado), essas 10 mensagens retornam ao estado Pronto.


Mensagem de confirmação

E se o cliente enviar um ack para o servidor? Ou seja, confirmar o recebimento da mensagem? O código é o seguinte:


Quando o segundo parâmetro do método BasicAck, multiple, é definido como falso, isso significa que o RabbitMQ é notificado de que a mensagem atual foi confirmada.Se for verdadeiro, uma mensagem adicional menor que a tag de entrega especificada pelo primeiro parâmetro será reconhecida。 (A confirmação em massa é para todo o canal)

Cancelar confirmação

E se um dos clientes do programa distribuído tiver uma exceção e quiser cancelar a confirmação da mensagem e deixar que outros clientes processem a mensagem?

Quando há uma exceção na mensagem de consumo, precisamos cancelar a confirmação, e então podemos usar o método básicoReject do Channel.

O primeiro parâmetro especifica a tag de entrega, e o segundo parâmetro descreve como lidar com essa mensagem de falha.Um valor de true significa que a mensagem é colocada de volta no cabeçalho da fila, e um valor de false significa que a mensagem foi abandonada




Anterior:Te ensinar a configurar seu próprio servidor DNS!
Próximo:Mapas de Baidu para obter coordenadas da cidade
Publicado em 22/09/2021 20:49:04 |
Aprenda a aprender...
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com