标签: kue

如何在Heroku上与Node.js通信Web和Worker dynos?

Web Dynos可以处理HTTP请求

Web Dynos处理它们时,Worker Dynos可以处理它的作业.

但我不知道如何让Web DynosWorker Dynos相互沟通.

例如,我想通过Web Dynos接收HTTP请求

,发送给工人Dynos

,处理作业并将结果发送回Web Dynos

,在Web上显示结果.

在Node.js中这可能吗?(使用RabbitMQ或Kue等)?

我在Heroku文档中找不到一个例子

或者我应该在Web Dynos中实现所有代码并仅扩展Web Dynos吗?

heroku rabbitmq redis node.js kue

33
推荐指数
1
解决办法
9430
查看次数

Node.js Kue如何重启失败的作业

我在我的node.js应用程序中使用kue来延迟作业.

我有一些问题要弄清楚如何使用kue的API重新启动作业,而不必使用redis命令手动将作业的id从失败的作业列表移动到非活动作业列表.

这可能使用kue吗?

我不想设置固定数量的重试次数 - 我只想重试特定的工作.

对于维持良好维护的替代方案的建议也是受欢迎的.

javascript delayed-job redis node.js kue

13
推荐指数
1
解决办法
4749
查看次数

是否可以在Kue Node.js中更新已创建的作业?

我正在使用Kue创造就业机会.

jobs.create('myQueue', { 'title':'test', 'job_id': id ,'params':  params } )
            .delay(milliseconds)
            .removeOnComplete( true )
            .save(function(err) {
                if (err) {
                    console.log( 'jobs.create.err', err );
                }

});
Run Code Online (Sandbox Code Playgroud)

每个工作都有延迟时间,通常是3个小时.

现在,我将检查每个想要创建新作业的传入请求并获取id.

从上面的代码中可以看出,当我创建一个作业时,我会将作业ID添加到作业中.

所以现在我想检查队列中现有作业'job_id'的传入id,如果找到匹配的id,则用新参数更新现有作业.

所以我的工作队列每次都会有独特的job_id :).

可能吗?我搜索了很多,但没有找到帮助.我检查了kue JSON API.但它只能创建和获取检索作业,无法更新现有记录.

javascript queue node.js express kue

12
推荐指数
1
解决办法
2664
查看次数

如何在kue中恢复具有特定身份的工作?

我正在使用kue作为我的工作队列,我想知道如果不使用GUI仍然剩下多少工作,有多少工作失败等等.如何检索这类信息?

例如,在开始处理作业队列几分钟后,我想将目前失败的所有作业的状态更新为"非活动",以便重新启动它们.

唯一相关的问题我能找到的计算器是这个,但是,它同时具有一个作业交易,因为它正在处理它触发某个事件之后.我的担忧是不同的,因为我有兴趣检索具有特定状态的数据库中的所有作业.

这个问题的答案提到了kue库的函数.complete,它检索数据库中所有已完成的作业.其他可能的工作状态是否有类似的功能?

node.js kue

9
推荐指数
1
解决办法
5027
查看次数

如何使用Kue每周四安排一次工作?

使用Kue,如何安排每周四执行一次作业?Kue自述文件提到我可以延迟工作,但是在特定时间重复执行工作呢?

我可以用cron工作做我想做的事,但我喜欢Kue的功能.

我想要的是在周四的任何时候处理一份工作,但只能处理一次.

jobs node.js kue

8
推荐指数
1
解决办法
5193
查看次数

在Heroku上使用kue-scheduler和ParseServer

在使用heroku redis插件在heroku上运行kue-scheduler时,虽然我可以让kue作业工作,但似乎kue-scheduler需要在heroku redis环境中不允许某些redis配置.有没有人在Heroku环境中成功运行kue-scheduler.这是我的index.js文件的开头:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');

var kue = require('kue-scheduler')
var queue = kue.createQueue({redis:
        'redis://h:***************@ec2-**-19-83-130.compute-1.amazonaws.com:23539'
        });

var job = queue.create('test', {
    title: 'Hello world'
  , to: 'j@example.com'
  , template: 'welcome-email'
}).save( function(err){
   if( !err ) console.log( job.id );
});

job.log('$Job %s run', job.id);

queue.every('30 seconds', job);

queue.process('test', function(job, done){
  test_function(job.data.title, done);
});

function test_function(title, done) {
  console.log('Ran test function with title %s', title)
  // email send stuff...
  done();
}
Run Code Online (Sandbox Code Playgroud)

这是错误.

2016-07-21T00:46:26.445297+00:00 …
Run Code Online (Sandbox Code Playgroud)

heroku redis parse-platform kue

6
推荐指数
1
解决办法
459
查看次数

乱序处理后的“重新排序”消息

我正在研究什么基本上是一个高度可用的分布式消息传递系统。系统通过 HTTP 或 TCP 从某处接收消息,对其执行各种转换,然后将其发送到一个或多个目的地(也使用 TCP/HTTP)。

系统要求发送到给定目的地的所有消息都是有序的,因为有些消息建立在先前消息的内容之上。这限制了我们按顺序处理消息,每条消息大约需要 750 毫秒。因此,例如,如果有人每 250 毫秒向我们发送一条消息,我们将被迫将消息排在彼此后面。这最终会在高负载下在消息处理中引入无法容忍的延迟,因为每条消息在轮到它之前可能必须等待数百条其他消息被处理。

为了解决这个问题,我希望能够在不违反我们按顺序发送它们的要求的情况下并行化我们的消息处理。

我们可以轻松地横向扩展我们的处理。缺失的部分是一种确保即使消息被乱序处理的方法,它们也会被“重新排序”并按照接收顺序发送到目的地。我正在努力寻找实现这一目标的最佳方式。

Apache Camel 有一个叫做 Resequencer 的东西可以做到这一点,它包括一个很好的图表(我没有足够的代表直接嵌入)。这正是我想要的:接收无序消息并将它们按顺序排列的东西。

但是,我不希望它是用 Java 编写的,我需要该解决方案具有高可用性(即能够抵抗典型的系统故障,如崩溃或系统重新启动),我认为 Apache Camel 无法提供。

我们的应用程序是用 Node.js 编写的,使用 Redis 和 Postgresql 进行数据持久化。我们将Kue库用于我们的消息队列。尽管 Kue 提供优先排队,但功能集对于上述用例来说太有限了,所以我认为我们需要一种替代技术来与 Kue 协同工作来重新排序我们的消息。

我试图在网上研究这个话题,但我找不到预期的那么多信息。看起来像分布式架构模式的类型,会有大量的文章和实现,但我没有看到那么多。搜索诸如“消息重新排序”、“乱序处理”、“并行消息处理”等内容,可以找到大多数只是放宽基于分区或主题或诸如此类的“有序”要求的解决方案。或者,他们谈论在单台机器上的并行化。我需要一个解决方案:

  • 可以以任何顺序同时处理多条消息。
  • 将始终按照消息到达系统的顺序发送消息,无论它们以何种顺序进行处理。
  • 可从 Node.js 使用
  • 可以在 HA 环境中运行(即它的多个实例同时运行在同一个消息队列上,没有不一致的情况。)

我们目前的计划,对我来说很有意义,但我在网上找不到任何描述,是使用 Redis 来维护一组进行中和准备发送的消息,按到达时间排序。粗略地说,它是这样工作的:

  1. 当收到一条消息时,该消息被放入进行中的集合中。
  2. 当消息处理完成时,该消息被放入准备发送集。
  3. 只要在进行中和准备发送集的前面都有相同的消息,就可以发送该消息并且它会按顺序进行。

我会编写一个小型 Node 库,它使用原子 Redis 事务通过优先级队列式 API 实现此行为。但这只是我自己想出来的,所以我想知道:是否有其他技术(理想情况下使用我们已经在使用的 Node/Redis 堆栈)可以解决重新排序乱序消息的问题? 或者是否有其他术语可以用作我可以用作研究关键字的此问题?谢谢你的帮助!

distributed message-queue redis node.js kue

6
推荐指数
1
解决办法
966
查看次数

How to manage stuck jobs in Kue?

I'm using Kue to create jobs for my MEAN.js app. If the application is idle for some time the Redis connection is closed, apparently Kue is trying to process jobs while the connection is closed, and I get some errors.

I'm watching for stuck jobs every 6 seconds, but this doesn't seem to help avoid the errors.

app.jobs.watchStuckJobs(1000 * 6);
Run Code Online (Sandbox Code Playgroud)

These are the errors I'm getting, for each job I'm processing, after the connection is closed and before the connection …

javascript redis node.js kue

6
推荐指数
0
解决办法
1158
查看次数

如何在不同端口上的单个服务器上运行redis?

我正在使用使用node_redis的kue,但我也已经在使用我的会话了,所以我想在特定端口上创建一个服务器,说默认然后监听端口.node_rediskue6379kue1234

我怎么能这样做?我发现这篇文章谈论类似的东西,但我真的不想创建一个init脚本来执行此操作.

redis node-redis kue

5
推荐指数
1
解决办法
9512
查看次数

使用kue连接到Redis始终会创建到本地主机的连接

我无法使用kue连接到Redis,我已经关注了本文,实际上我是通过使用kue redis客户端创建连接的,连接代码是这样的:

  var kue = require('kue'),
  redis = require('kue/node_modules/redis');

  app.redisClient =  redis.createClient('6379', 'remoteip',{});
  app.redisClient.on('error', function (err) {
      console.log('Redis error encountered', err);
  });

  app.redisClient.on('end', function() {
      console.log('Redis connection closed');
   });

   kue.redis.createClient = function() {
      console.log('client ------------------',app.redisClient);
      return app.redisClient;
   };
Run Code Online (Sandbox Code Playgroud)

似乎Kue正在尝试连接到本地Redis(我尚未安装),因为我遇到了以下异常:

错误:Redis与127.0.0.1:6379的连接失败-连接ECONNREFUSED

我已经阅读了这篇文章,似乎问题已在0.8版中解决,并且我使用的是0.8.11:/,最后我还想通过使用redis nodejs来使用其他客户端实例覆盖客户端,没有任何运气,因为我遇到了同样的错误。

任何帮助将不胜感激。谢谢!

redis node.js node-redis kue

5
推荐指数
1
解决办法
2271
查看次数