J'ai vérifié la partie "Durabilité du message" de RabbitMQ tutorial. Mais il a cette note:File d'attente vraiment durable dans RabbitMQ
Marquer les messages comme persistants ne garantit pas entièrement qu'un message ne sera pas perdu. Bien qu'il dise à RabbitMQ de sauvegarder le message sur le disque, il y a encore une petite fenêtre temporelle quand RabbitMQ a accepté un message et ne l'a pas encore enregistré. En outre, RabbitMQ ne fait pas fsync (2) pour chaque message - il peut être juste sauvé en cache et pas vraiment écrites sur le disque
Mais si je dois vraiment file d'attente durable? Quelles sont les meilleures pratiques que je peux utiliser? Dois-je avoir "queue" dans la base de données et un certain "resender" par cron si, par exemple, le message n'a pas été ACK dans 2 minutes? Y a-t-il de meilleures solutions?
En outre, que se passe-t-il si mon consommateur s'est brisé après avoir traité le message et avant il a envoyé ACK? UPD: ma question a été marquée comme "possible duplicate" de la question de clustering. Je ne sais pas comment les grappes peuvent aider à résoudre ces problèmes.
http://stackoverflow.com/questions/29095990/rabbitmq-clustering – jpaljasma
Que se passe-t-il si le cluster entier s'est bloqué? –
La probabilité est très faible ... Pourtant, si vous êtes vraiment inquiet et n'avez pas besoin d'ACK au niveau de l'application, vous pouvez avoir votre propre file d'attente pour des situations comme celle-là. Selon l'application - peut-être une petite instance Redis installée sur le serveur web local + python/php via l'application cron/node.js pour pousser la file d'attente d'envoi après que RabbitMQ soit à nouveau disponible? – jpaljasma