使用现有 Mongodb 连接而不是 运行 作业定义实例化时的议程
Agenda when instantiated with existing Mongodb connection, not running the job definition
我在初始化议程实例时没有使用 mongodb 连接字符串,而是使用了一个已经连接的 mongo 客户端实例。
我面临的问题是 agenda.every 的文档被添加到集合中,但是当达到指定时间时,作业定义没有 运行。
仅当我使用已连接的 mongo 客户端实例时才会发生此问题,否则当我让议程处理连接时它会正常工作。
我还注意到,当 ram 使用量超过 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};`
我们的团队终于可以解决这个问题:
在示例应用程序中尝试使用现有 Mongodb 连接实例化时发现议程正常工作。
对于 RAM 使用率高的 MongoNetworkError,使用了 'useUnifiedTopology' 选项:new Agenda({ db: { address: mongoDbUrl, collection: "newNotification", options: { useUnifiedTopology: true } }, processEvery: "40 seconds"});
我在初始化议程实例时没有使用 mongodb 连接字符串,而是使用了一个已经连接的 mongo 客户端实例。 我面临的问题是 agenda.every 的文档被添加到集合中,但是当达到指定时间时,作业定义没有 运行。 仅当我使用已连接的 mongo 客户端实例时才会发生此问题,否则当我让议程处理连接时它会正常工作。
我还注意到,当 ram 使用量超过 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};`
我们的团队终于可以解决这个问题:
在示例应用程序中尝试使用现有 Mongodb 连接实例化时发现议程正常工作。
对于 RAM 使用率高的 MongoNetworkError,使用了 'useUnifiedTopology' 选项:
new Agenda({ db: { address: mongoDbUrl, collection: "newNotification", options: { useUnifiedTopology: true } }, processEvery: "40 seconds"});