Web Dynos可以处理HTTP请求
当Web Dynos处理它们时,Worker Dynos可以处理它的作业.
但我不知道如何让Web Dynos和Worker Dynos相互沟通.
例如,我想通过Web Dynos接收HTTP请求
,发送给工人Dynos
,处理作业并将结果发送回Web Dynos
,在Web上显示结果.
在Node.js中这可能吗?(使用RabbitMQ或Kue等)?
我在Heroku文档中找不到一个例子
或者我应该在Web Dynos中实现所有代码并仅扩展Web Dynos吗?
我在我的node.js应用程序中使用kue来延迟作业.
我有一些问题要弄清楚如何使用kue的API重新启动作业,而不必使用redis命令手动将作业的id从失败的作业列表移动到非活动作业列表.
这可能使用kue吗?
我不想设置固定数量的重试次数 - 我只想重试特定的工作.
对于维持良好维护的替代方案的建议也是受欢迎的.
我正在使用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.但它只能创建和获取检索作业,无法更新现有记录.
使用Kue,如何安排每周四执行一次作业?Kue自述文件提到我可以延迟工作,但是在特定时间重复执行工作呢?
我可以用cron工作做我想做的事,但我喜欢Kue的功能.
我想要的是在周四的任何时候处理一份工作,但只能处理一次.
在使用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) 我正在研究什么基本上是一个高度可用的分布式消息传递系统。系统通过 HTTP 或 TCP 从某处接收消息,对其执行各种转换,然后将其发送到一个或多个目的地(也使用 TCP/HTTP)。
系统要求发送到给定目的地的所有消息都是有序的,因为有些消息建立在先前消息的内容之上。这限制了我们按顺序处理消息,每条消息大约需要 750 毫秒。因此,例如,如果有人每 250 毫秒向我们发送一条消息,我们将被迫将消息排在彼此后面。这最终会在高负载下在消息处理中引入无法容忍的延迟,因为每条消息在轮到它之前可能必须等待数百条其他消息被处理。
为了解决这个问题,我希望能够在不违反我们按顺序发送它们的要求的情况下并行化我们的消息处理。
我们可以轻松地横向扩展我们的处理。缺失的部分是一种确保即使消息被乱序处理的方法,它们也会被“重新排序”并按照接收顺序发送到目的地。我正在努力寻找实现这一目标的最佳方式。
Apache Camel 有一个叫做 Resequencer 的东西可以做到这一点,它包括一个很好的图表(我没有足够的代表直接嵌入)。这正是我想要的:接收无序消息并将它们按顺序排列的东西。
但是,我不希望它是用 Java 编写的,我需要该解决方案具有高可用性(即能够抵抗典型的系统故障,如崩溃或系统重新启动),我认为 Apache Camel 无法提供。
我们的应用程序是用 Node.js 编写的,使用 Redis 和 Postgresql 进行数据持久化。我们将Kue库用于我们的消息队列。尽管 Kue 提供优先排队,但功能集对于上述用例来说太有限了,所以我认为我们需要一种替代技术来与 Kue 协同工作来重新排序我们的消息。
我试图在网上研究这个话题,但我找不到预期的那么多信息。看起来像分布式架构模式的类型,会有大量的文章和实现,但我没有看到那么多。搜索诸如“消息重新排序”、“乱序处理”、“并行消息处理”等内容,可以找到大多数只是放宽基于分区或主题或诸如此类的“有序”要求的解决方案。或者,他们谈论在单台机器上的并行化。我需要一个解决方案:
我们目前的计划,对我来说很有意义,但我在网上找不到任何描述,是使用 Redis 来维护一组进行中和准备发送的消息,按到达时间排序。粗略地说,它是这样工作的:
我会编写一个小型 Node 库,它使用原子 Redis 事务通过优先级队列式 API 实现此行为。但这只是我自己想出来的,所以我想知道:是否有其他技术(理想情况下使用我们已经在使用的 Node/Redis 堆栈)可以解决重新排序乱序消息的问题? 或者是否有其他术语可以用作我可以用作研究关键字的此问题?谢谢你的帮助!
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 …
我正在使用使用node_redis的kue,但我也已经在使用我的会话了,所以我想在特定端口上创建一个服务器,说默认然后监听端口.node_rediskue6379kue1234
我怎么能这样做?我发现这篇文章谈论类似的东西,但我真的不想创建一个init脚本来执行此操作.
我无法使用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来使用其他客户端实例覆盖客户端,但没有任何运气,因为我遇到了同样的错误。
任何帮助将不胜感激。谢谢!
kue ×10
node.js ×8
redis ×7
javascript ×3
heroku ×2
node-redis ×2
delayed-job ×1
distributed ×1
express ×1
jobs ×1
queue ×1
rabbitmq ×1