J'ai une structure de message RabbitMQ, où un message A
est censé générer un certain nombre de messages, appelons-les B
et C
. Un message A
est reçu par un processus de travail, qui le traite ensuite et génère des messages B
et C
.RabbitMQ message subséquent atomicité
Le processus de workflow supposé est la suivante:
- Recevez un message
A
avecack=False
- Démarrer une transaction
- Exécuter un code
- Générer un message
B
- Générer un message
C
- Envoyer
ack
pour le messageA
- complète la transaction
Dans tous les cas, un processus de travail meurt pendant le traitement des messages A
, ou tout est n'a pas encore complété la transaction - Je voudrais RabbitMQ traiter le message A
comme non remis et remis en file d'attente. RabbitMQ fonctionne en configuration hautement disponible si cela est pertinent.
Pourquoi question tente de dégager la documentation RabbitMQ here, indiquant:
En outre, RabbitMQ fournit aucune garantie atomicité même en cas d'opérations portant sur une seule file d'attente, par exemple une erreur pendant tx.commit peut entraîner l'apparition d'un sous-ensemble des publications de la transaction dans la file d'attente après un redémarrage du courtier.
- Est-il possible que je pourrais obtenir le comportement que je voudrais dans le contexte de RabbitMQ ou tout autre logiciel faire la queue sur le marché?
- Y at-il un moyen que je pourrais faire fonctionner cela pour plusieurs files d'attente avec RabbitMQ?
Je sais exactement comment implémenter ceci - une solution SQL-soutenue serait une solution naïve à cela. Mon problème est de trouver le bon logiciel qui serait capable de le faire efficacement au niveau de performance RabbitMQ, plutôt que Postgres/MySQL. –