RabbitMQ: les messages restent "non acquittés"
Mon application Java envoie des messages à RabbitMQ exchange, exchange redirige les messages vers bindings de la file d'attente.
J'utilise Springframework AMQP plugin java avec RabbitMQ.
Le problème: un message à la file d'attente, mais il reste en "non reconnus" de l'état, il ne devient jamais "Prêt".
Quelle pourrait être la raison?
source d'informationauteur sunny
Vous devez vous connecter pour publier un commentaire.
Un Méconnue message qui implique qu'il a été lu par votre consommateur, mais le consommateur n'a jamais renvoyé un accusé de réception à l'RabbitMQ courtier-à-dire qu'il a terminé le traitement.
Je ne suis pas trop familier avec le Framework Spring plugin, mais quelque part (pour votre consommation), vous serez en déclarant votre file d'attente, il pourrait ressembler à quelque chose comme ceci (prises de http://www.rabbitmq.com/tutorials/tutorial-two-java.html):
alors vous allez configurer votre consommation
ackMode ci-dessus est un booléen, en fixant le faux, nous sommes le dire explicitement à RabbitMQ que ma consommation va accuser réception de chaque message, il est donné. Si cette option est définie à true, alors vous ne serez pas le voir non reconnus compter dans RabbitMQ, plutôt dès qu'un consommateur a lu le message (j'.e il a été livré pour le consommateur, il sera supprimé de la file d'attente).
Accuser réception d'un message que vous feriez quelque chose comme ceci:
Si vous pouvez poster une partie de votre code de la consommation alors je pourrais être en mesure d'aider les autres...mais dans le temps, jetez un oeil à BlockingQueueConsumer spécifiquement: le constructeur, vous verrez que vous pouvez définir le AcknowledgeMode et aussi de prendre un coup d'oeil à la nextMessage() retournera un objet de Message qui contient une méthode appelée getDeliveryTag() ce sera de retour d'une Longue qui est l'ID que vous renvoyer sur le basicAck
Juste pour ajouter mon 2 cents pour une autre raison possible pour les messages en restant dans un méconnue de l'état, même si le consommateur fait que vous utilisez la basicAck méthode-
Parfois plusieurs instances d'un processus ouvert, et RabbitMQ connexion de séjour en cours d'exécution, dont l'un peut provoquer un message d'obtenir coincé dans un méconnue de l'état, de prévenir une autre instance de la consommation à jamais récupère à nouveau ce message.
Vous pouvez accéder à la RabbitMQ de la console de gestion (pour une machine locale, il devrait être disponible à localhost:15672), et de vérifier si plusieurs instances de l'obtenir de la chaîne, ou si une seule instance est actuellement active:
Trouver redondant tâche en cours d'exécution (dans ce cas - java) et d'y mettre fin. Après avoir retiré le processus malveillant, vous devriez voir le message sauts à l'état Prêt à nouveau.