RabbitMQ - mis à jour vers une nouvelle version et obtenu beaucoup de "PRECONDITION_FAILED inconnue étiquette de livraison 1"
Juste mis à niveau vers une nouvelle version de RabbitMQ -- 2.3.1 -- et maintenant l'erreur suivante se produit:
PRECONDITION_FAILED unknown delivery tag 1
...suivi par la fermeture d'un canal. Cela a fonctionné sur un vieux RabbitMQ avec aucune des modifications côté client.
En termes de comportement de l'application:
Lors de l'Application a veut envoyer Un message asynchrone à l'Application b et de recevoir une réponse de B, c'est l'algorithme:
- App générer Un IDENTIFIANT unique et le met dans l'objet du message
- Alors l'Application A souscrit à une nouvelle File d'attente à la fois avec le nom de file d'attente et le routage de la clé est égale à l'uuid.
- Application B ouvrez le message, de faire quelques calculs et de retourner le résultat de la chaîne avec la routkey qu'il a reçu.
- App obtient la réponse et fermer la file d'attente.
Jusqu'à présent, tout s'est très bien passé dans la version 1.7.0. ce qui s'est passé en 2.3.1?
Lors de l'Application d'Un des appels basicPublish()
l'application B jette tout de suite l'exception suivante:
com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.close>(reply-code=406,reply-text=PRECONDITION_FAILED - unknown delivery tag 1,class-id=60,method-id=80),null,""}
at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:191)
at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:159)
at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:110)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:438)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.close>(reply-code=406,reply-text=PRECONDITION_FAILED - unknown delivery tag 1,class-id=60,method-id=80),null,""}
source d'informationauteur Bick
Vous devez vous connecter pour publier un commentaire.
La seule codepath qui peut provoquer cette exception, c'est par l'intermédiaire de la manipulation de base.accusé de réception", de sorte que cela ressemble à un client en question; vérifier le code du client.
En particulier, vérifiez que vous n'êtes pas d'accusé de réception avec des messages de plus d'une fois. Cela est en violation de la AMQP 0-9-1 spec:
Un lieu idéal pour se poser de telles questions est le rabbitmq-discuter mainling-liste; tous les RabbitMQ développeurs de lire la liste et assurez-vous de ne pas laisser de questions sans réponse.
Il est également intéressant de noter que les versions précédentes de Lapin étaient plus laxistes et ne jetez pas une erreur dans ce cas, mais les versions plus récentes faire.
Juste mis
noAck: false
surBasicConsume
méthode