Reanudar con tokens

Sigue un change stream donde lo dejaste después de una caída o un reinicio.

Sigue un change stream donde lo dejaste después de que tu proceso se caiga o se reinicie. Cada evento lleva un token de reanudación que lo identifica.

Requisitos

  • Un usuario con los privilegios find y changeStream sobre lo que vigilas.
  • Un sitio donde guardar el último token, como una colección propia.

Guardar el token de cada evento

JavaScript
for await (const cambio of db.pedidos.watch()) {
  await procesar(cambio);
  await db.tokens.updateOne({ _id: "pedidos" }, { $set: { token: cambio._id } }, { upsert: true });
}

Reanudar

JavaScript
const guardado = await db.tokens.findOne({ _id: "pedidos" });
const stream = db.pedidos.watch([], { resumeAfter: guardado.token });

startAfter funciona igual que resumeAfter y además sirve para seguir después de un evento invalidate.

Comprobar

Si paras el proceso, insertas un documento y lo vuelves a arrancar, el bucle recibe ese evento.

Problemas frecuentes

  • No puedes reanudar porque el token es más antiguo que el historial que conserva el clúster, 24 horas por defecto. Sube teselaHistoryRetention si tus procesos pueden estar parados más tiempo.

Ver también