Message retardé dans RabbitMQ
Est-il possible d'envoyer un message via RabbitMQ avec un peu de retard?
Par exemple je veux expiration de session d'un client au bout de 30 minutes, et j'ai envoyer un message qui sera traitée après 30 minutes.
- Avez-vous besoin pour utiliser RabbitMQ?
- Oui, cette fonctionnalité est disponible depuis RabbitMQ-3.5.8. github.com/rabbitmq/rabbitmq-delayed-message-exchange
- Si vous utilisez le Printemps AMQP, il y a support pour le plugin.
Vous devez vous connecter pour publier un commentaire.
Il existe deux approches que vous pouvez essayer:
L'ancienne Approche: Définir le TTL(time to live) de l'en-tête de chaque message/file d'attente(la politique) et ensuite introduire une DLQ de le gérer. une fois la durée de vie a expiré vos messages vont passer de DLQ à la file d'attente principale, de sorte que votre auditeur peut la traiter.
Dernière Approche: Récemment RabbitMQ est venu avec RabbitMQ Message Retardé Plugin , à l'aide de laquelle vous pouvez atteindre le même et ce support de plugins disponibles depuis RabbitMQ-3.5.8.
Vous pouvez déclarer un échange avec le type de x-retard de message et publier des messages avec la coutume d'en-tête x-délai exprimé en millisecondes, un temps de retard pour le message. Le message sera envoyé à la files d'attente respectives, après x-retard millisecondes
Plus ici: git
Avec la sortie de RabbitMQ v2.8, de livraison prévue est maintenant disponible, mais indirectement fonctionnalité: http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.html
Merci à Norman réponse, j'ai pu mettre en œuvre dans NodeJS.
Tout est assez clair dans le code.
Espérons qu'il permettra de sauver quelqu'un de l'époque.
Que je n'ai pas assez de réputation pour ajouter un commentaire, poster une nouvelle réponse. C'est juste un complément à ce qui a déjà été discuté lors de http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.html
Sauf qu'au lieu d'paramètre ttl sur les messages, vous pouvez le régler au niveau de la file d'attente. Aussi, vous pouvez éviter de créer un nouvel échange juste pour le plaisir de rediriger les messages de différentes File d'attente. Voici un exemple de code java:
Producteur:
Consommateur:
Il ressemble ce blog décrit l'utilisation de la lettre morte, l'échange et le message ttl à faire quelque chose de similaire.
Le code ci-dessous utilise CoffeeScript et Node.JS pour accéder à Lapin et de mettre en œuvre quelque chose de similaire.
C'est pas possible. Vous devez stocker vos expiration horodateurs dans une base de données ou quelque chose de similaire, puis demander à un assistant de programme qui lit ces horodatages et les files d'attente d'un message.
Messages différés sont aussi, souvent, une demande de fonctionnalité, comme ils sont utiles dans de nombreuses situations. Toutefois, si votre besoin est d'expiration des sessions client je crois que la messagerie n'est pas la solution idéale pour vous, et qu'une autre approche pourrait fonctionner mieux.