【问题标题】:How to run a job through Queue in arangodb如何在 arangodb 中通过队列运行作业
【发布时间】:2017-01-11 19:16:26
【问题描述】:

我正在从 ArangoDb 2.5.7 迁移到 ArangoDb 3.1.7。除了乔布斯之外,我已经设法使一切正常。我查看了文档,但我不明白如果我必须为此创建一个单独的服务?

所以,我有一个 foxx 应用程序 myApp

ma​​nifest.json

{
"name": "myApp",
"version": "0.0.1",
"author": "Deepak",
"files": 
{
    "/static": "static"
},

"engines": 
{
    "arangodb": "^3.1.7"
},

"scripts": 
{
    "setup": "./scripts/setup.js",
    "myJob": "./scripts/myJob.js"
},

"main": "index.js"

}

index.js

'use strict';
module.context.use('/one', require('./app'));

app.js

const createRouter = require('org/arangodb/foxx/router');
const controller = createRouter();
module.exports = controller;

const queues = require('@arangodb/foxx/queues');
queue = queues.create('myQueue', 2);
queue.push({mount:"/myJob", name:"myJob"}, {"a":4}, {"allowUnknown": true});

myJob.js

const argv = module.context.argv;
var obj = argv[0];
console.log('obj:'+obj);

我收到以下错误:

作业失败: ArangoError:找不到服务 挂载路径:“/myJob”。

我不确定是否必须将 myJob 扩展为外部服务。你能帮助我吗。我没有看到如何做到这一点的完整示例。

【问题讨论】:

  • 您需要为挂载点队列创建另一个服务...在您的问题中,您需要创建服务“myJob”..如果您想使用相同的服务,请改用您的 foxx 挂载路径“/我的工作”
  • 这是否意味着我需要创建另一个 _db/_system/myJob/APP 结构和 manifest.json、index.js 等?

标签: arangodb


【解决方案1】:

回答你的问题:

您不必将作业脚本提取到新服务中。您可以使用module.context.mount指定当前服务的挂载点。

您可以在文档中找到有关上下文对象的更多信息:https://docs.arangodb.com/3.1/Manual/Foxx/Context.html

顺便说一句,在挂载时随意创建作业可能不是一个好主意。队列的常见用例是在路由处理程序中创建作业,作为传入请求的副作用(例如,在注册时发送欢迎电子邮件)。

如果您在挂载时创建作业(例如,在您的主文件或它所需的文件中),该作业将在文件执行时创建,每个 Foxx 线程至少创建一次(默认为 ArangoDB使用多个 Foxx 线程来处理并行请求)或每个请求启用一次开发模式时(!)。

同样,如果您在设置脚本中创建一个作业,它将在设置脚本执行时创建,尽管每次只会在一个线程中发生(但在开发模式处于活动状态时仍然每个请求一次)。

如果您需要,例如与您的服务一起存在的定期作业,您应该将它放在一个唯一的队列中,并且只有在检查它是否已经存在之后才能在您的设置脚本中创建它。


关于队列 API 的变化:

队列 API 在 2.6 中发生了更改,原因是旧 API 存在严重问题,在将作业推送到队列后重新启动 ArangoDB 守护程序时,该问题经常会导致未正确重新安排待处理的作业。

特别是 ArangoDB 2.6 引入了所谓的基于脚本(而不是基于函数)的作业类型:https://docs.arangodb.com/3.1/Manual/ReleaseNotes/UpgradingChanges26.html#foxx-queues

在 ArangoDB 2.7 中不再支持旧的基于函数的作业类型,并且更新了食谱以反映基于脚本的作业类型:https://docs.arangodb.com/2.8/cookbook/FoxxQueues.html

关于新队列的更详细描述可以在文档中找到:https://docs.arangodb.com/3.1/Manual/Foxx/Scripts.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    相关资源
    最近更新 更多