J'ai plusieurs consommateurs concurrents distribués tirant chacun des messages de la même file d'attente (transactionnelle). Je veux implémenter chaque consommateur comme un Idempotent Receiver ainsi je ne traite jamais le même message plus d'une fois (à travers tous les consommateurs) même si un double arrive. Comment puis-je accomplir cela avec plusieurs consommateurs? Ma première pensée est de générer en quelque sorte un numéro de séquence consécutif pour chaque message avant de les mettre dans la file d'attente, puis d'utiliser une table de base de données partagée pour coordonner le travail entre les consommateurs. C'est à dire. Le consommateur n ° 1 traite le msg n ° 1 puis écrit une ligne dans la table DB en disant "msg # 1 est traité" (le souhaite dans une base de données pour assurer la durabilité). Lorsqu'un consommateur est prêt à traiter un message, il passe en revue le suivant disponible dans la file d'attente, consulte la table DB partagée et détermine s'il s'agit du message suivant dans l'ordre. Si c'est le cas, il l'enlève de la file d'attente. Sinon, il l'ignore. De cette façon, j'ai seulement besoin de stocker le dernier message traité (comme il y a un numéro de séquence consécutif pour tous les msgs), je n'ai pas besoin d'utiliser un tampon stockant les ID de tous les messages reçus avec une fenêtre négociée 'taille, et les messages sont toujours traités en série (ce qui est ce que je veux pour ce scénario).Comment assurer l'idempotence des messages avec plusieurs consommateurs concurrents?
Juste curieux s'il y a un meilleur moyen? Je suis préoccupé par le coût de l'interrogation de la base de données chaque fois que j'ai besoin de traiter un message.
Si la réponse est « cela dépend du cadre », alors j'avais MSMQ à l'esprit
Si ma logique de traitement API/message est conçu de manière à être idempotent alors oui, je ne suis pas à me soucier de recevoir msgs en double. Ce n'est pas le cas pour mon scénario. J'ai besoin de filtrer les messages en double et pas seulement pour une instance d'un consommateur mais sur plusieurs instances. – emertechie
Mais que se passe-t-il si je suis le seul moyen de garantir l'idempotence en évitant que les effets secondaires se produisent une seconde fois? –