Temos um aplicativo PHP que encaminha mensagens do RabbitMQ para dispositivos conectados por meio de uma conexão WebSocket (extensão PHP AMQP pecl v1.7.1 e RabbitMQ 3.6.6).
As mensagens são consumidas de uma série de filas (1 por conexão de websocket) e são reconhecidas pelo consumidor quando recebemos a confirmação pelo websocket de que a mensagem foi recebida (para que possamos enfileirar novamente as mensagens que não são entregues em um prazo aceitável). Isso é feito de maneira não bloqueadora.
99% das vezes, isso funciona perfeitamente, mas muito ocasionalmente recebemos um erro "RabbitMQ PRECONDITION_FAILED - etiqueta de entrega desconhecida". Isso fecha o canal. No meu entendimento, essa exceção é resultado de uma das seguintes condições:
Implementamos proteções para cada um dos casos acima, mas o problema continua.
Eu percebo que há vários detalhes de implementação que podem impactar isso, mas em um nível conceitual, há algum outro caso de falha que não consideramos e devemos tratar? ou existe uma maneira melhor de alcançar a funcionalidade descrita acima?
"PRECONDITION_FAILED - etiqueta de entrega desconhecida" geralmente ocorre devido a confirmação dupla, confirmação em canais errados ou confirmação de mensagens que não deveriam ser confirmadas.
Então, no mesmo caso você está tentando executar basic.ack
duas vezes ou basic.ack
usando outro canal
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras