Significa que los duplicados son normales, no excepcionales, así que tu consumidor tiene que ser idempotente. Deriva una clave estable del mensaje, guarda las claves procesadas en la misma transacción que el efecto y trata una repetición como una operación nula. Cuenta también con entrega desordenada y con reentrega tras una caída entre hacer el trabajo y confirmar. La entrega exactamente una vez de extremo a extremo no existe entre sistemas; lo que tienes es al menos una vez más un manejo idempotente.
Por qué lo preguntan los entrevistadores
Esta es la fuente más común de cargos duplicados y correos duplicados en sistemas orientados a eventos. El entrevistador quiere saber si diseñas consumidores a la defensiva o asumes que el broker te va a proteger. Mencionar la ventana de confirmación, una tabla de deduplicación escrita en la misma transacción y una cola de mensajes fallidos demuestra que has operado un consumidor y no solo lo has escrito.
Cómo estructurar tu respuesta
- Di sin rodeos que habrá duplicados y por qué.
- Da el mecanismo de idempotencia, incluido dónde se escribe el registro.
- Cubre el orden y la ventana de confirmación.
- Añade gestión de fallos: reintentos con backoff y cola de mensajes fallidos.
Ejemplo de respuesta
Significa que voy a recibir el mismo mensaje dos veces, normalmente porque el consumidor hizo el trabajo y murió antes de confirmar, así que el broker lo reentrega. Por tanto el consumidor tiene que ser seguro de ejecutar dos veces con la misma entrada. En la práctica tomo un id estable del mensaje y, cuando escribo el efecto, escribo el id procesado en la misma transacción de base de datos, con una restricción de unicidad. Si el insert entra en conflicto, sé que ya lo he tratado y confirmo sin repetir el trabajo. La parte crítica es que el registro de deduplicación y el efecto se confirmen juntos; si los escribo por separado hay una ventana en la que puedo duplicar. También asumo que el orden no está garantizado, así que los manejadores toleran que llegue una actualización antes que la creación, normalmente indexando por la entidad y comprobando una versión. Para los fallos uso un reintento acotado con backoff exponencial y jitter, y luego una cola de mensajes fallidos con alerta, porque reintentar en silencio un mensaje envenenado para siempre es como una cola se atasca de noche.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Dónde guardarías exactamente la clave de deduplicación y durante cuánto tiempo?
- ¿Cómo preservas el orden cuando lo necesitas?
- ¿Cuál es tu proceso para vaciar una cola de mensajes fallidos?
Más preguntas para Desarrollador backend
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas