Повестка дня при создании экземпляра с существующим подключением Mongodb, без выполнения определения задания

#node.js #mongodb #agenda

Вопрос:

Вместо использования строки подключения mongodb при инициализации экземпляра повестки дня я использую уже подключенный экземпляр клиента mongo. Проблема, с которой я сталкиваюсь, заключается в том, что документ для повестки дня.каждый добавляется в коллекцию, но по достижении указанного времени определение задания не выполняется. Эта проблема возникает только тогда, когда я использую уже подключенный экземпляр клиента mongo, в противном случае он работает нормально, когда я разрешаю программе обрабатывать соединение.

Я также заметил, что когда использование оперативной памяти превышает 85% емкость, это приводит к ошибке MongoNetworkError. Если кто-то сталкивался с подобными проблемами и нашел решение, пожалуйста, отметьте этот ответ вместе.

 `agenda.then((agendaTmp: any) => {
    console.log("Received: ", agendaTmp.status);
    agendaTmp.agenda.define("test3", {}, (job: any, done: any) => {
      console.log("New agendaTmp schedule running");
      done();
    });
    agendaTmp.agenda.on("ready", async () => {
      console.log("Ready: ");
      agendaTmp.agenda.every("*/1 * * * *", "test3", {});
      await agendaTmp.agenda.start();
    });
}

// Agenda init file
import { Agenda } from "agenda";
import { MongoClient } from "mongodb";

const agenda = new Promise((resolve, reject) => {
  const client = new MongoClient(dbURL);
  client
    .connect()
    .then(() => {
      const database = client.db("scheduler");
      const collection = database.collection("newNotification");
   
      collection.findOne({}).then((result) => {
        console.log("In mongo query: ", result);
      });

      let agendaTmp = new Agenda({
        processEvery: "40 seconds",
      });
      agendaTmp.mongo(database, "newNotification");

      return resolve({"agenda":agendaTmp, "status":true});
    })
    .catch(() => {
      return reject(false);
    });
});

export {agenda};` 

Комментарии:

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

2. Этот вопрос был обновлен на основе предложений.

Ответ №1:

Наша команда смогла наконец решить эту проблему:

  1. Повестка дня при создании экземпляра с существующим подключением Mongodb оказывается работающей при попытке в примере приложения.
  2. Для ошибки MongoNetworkError при высоком использовании оперативной памяти используется опция «useUnifiedTopology»: new Agenda({ db: { address: mongoDbUrl, collection: "newNotification", options: { useUnifiedTopology: true } }, processEvery: "40 seconds"});