Ça veut dire que les doublons sont normaux, pas exceptionnels, donc votre consommateur doit être idempotent. Dérivez une clé stable du message, enregistrez les clés traitées dans la même transaction que l'effet, et traitez une répétition comme une opération sans effet. Attendez-vous aussi à une livraison désordonnée et à une redistribution après un plantage entre le travail et l'accusé de réception. Le exactly once de bout en bout n'existe pas entre systèmes ; vous avez du at least once plus un traitement idempotent.
Pourquoi les recruteurs posent cette question
C'est la source la plus fréquente de débits en double et d'e-mails en double dans les systèmes événementiels. Le recruteur veut savoir si vous concevez vos consommateurs de façon défensive ou si vous supposez que le broker vous protégera. Mentionner la fenêtre d'accusé de réception, une table de déduplication écrite dans la même transaction, et une file de messages morts montre que vous avez exploité un consommateur et pas seulement écrit un.
Comment structurer votre réponse
- Dites clairement que les doublons arriveront, et pourquoi.
- Donnez le mécanisme d'idempotence, y compris où l'enregistrement est écrit.
- Traitez l'ordonnancement et la fenêtre d'accusé de réception.
- Ajoutez la gestion des échecs : reprises avec backoff et file de messages morts.
Exemple de réponse
Ça veut dire que je recevrai le même message deux fois, en général parce que le consommateur a fait le travail puis est mort avant d'accuser réception, donc le broker le redistribue. Le consommateur doit donc pouvoir tourner deux fois sans risque avec la même entrée. En pratique, je prends un identifiant stable dans le message, et quand j'écris l'effet j'écris l'identifiant traité dans la même transaction de base de données, avec une contrainte d'unicité. Si l'insertion entre en conflit, je sais que j'ai déjà traité et j'accuse réception sans refaire le travail. Le point critique, c'est que l'enregistrement de déduplication et l'effet soient validés ensemble ; si je les écris séparément, il existe une fenêtre où je peux dupliquer. Je suppose aussi que l'ordre n'est pas garanti, donc les gestionnaires sont écrits pour tolérer une mise à jour arrivant avant la création, en général en clé sur l'entité avec une vérification de version. Pour les échecs, j'utilise une reprise bornée avec backoff exponentiel et jitter, puis une file de messages morts avec une alerte, parce que réessayer indéfiniment un message empoisonné en silence, c'est comme ça qu'une file se bouche pendant la nuit.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Où exactement stockeriez-vous la clé de déduplication, et pendant combien de temps ?
- Comment préservez-vous l'ordre quand vous en avez besoin ?
- Quel est votre processus pour vider une file de messages morts ?
Autres questions pour Développeur backend
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions