Articles of 消息队列

工人是否可以将消息发回给制作人

我有一个NodeJS应用程序,出现以下情况:我收到来自用户的请求来计算需要使用非常复杂的math公式的内容。 目前,我运行这个整个过程,找出价值,然后发回给用户。 不幸的是,这不是非常asynchronous友好:) 我想要做的是在后台运行这个整个操作,一旦任务完成,工人回到我的计算值,然后发回给用户。 我一直在寻找各种各样的工作队列,包括Kue , Celery , Resque和Beanstalk ,但是他们都没有提供这个function。 他们在发送电子邮件或运行任何不需要接收某种价值的工作方面工作的很好,只是简单的成功与否,但似乎没有任何东西允许工作者实际上将自定义消息发送回创build该任务的原始生产者。 我说错了,上面提到的所有队列都不支持吗? 如果是这样的话,请指出我可以在哪些文档中了解如何利用此function。 否则,你可以指向我的其他任何支持此function的人吗?

节点工作进程/ cron作业build议

我有一个需要更新的项目数据库,或者说是经常执行的项目。 我正在使用一个消息队列(Kue)来处理这些作业的并发性,但是我的将作业添加到队列的过程如下所示: setInterval(function () { feed.find({}, function (error, foundModels) { jobs.create('update feeds', { feeds: foundModels }).save() }) }, 6000) 投票是这样的最好的方式将工作添加到队列中,你觉得呢? 或者每个feed应该在自己的计时器上(例如,每个饲料在完成后都会产生另一个作业6)?

请求处理如何与rails,redis和node.jsasynchronous?

对于Web开发,我想混合使用rails和node.js,因为我想从两个世界中获得最好的效果(rails for fast web development and node for concurrency)。 我知道有些人select使用完整的ruby stack,并将eventmachine集成到rails controller中,这样每个请求在事件循环模型中都可以使用光纤进行非阻塞。 我已经能够理解这是如何工作的大局。 但是,我想尝试使用消息队列概念的rails和node.js进行非阻塞请求处理。 我听说这可以通过使用redis作为中介来实现。 我仍然无法弄清楚现在是如何工作的。 从我所能理解的:所以我们有2个应用程序A(rails)和B(node.js)和redis。 Rails应用程序将处理来自通过REST方式通过控制器的用户的请求,然后从那里的轨道将通过redis传递,然后redis将形成队列和node.js应用程序将拿起该队列,并做任何必要的事后(写或从后端数据库读取)。 我的问题: 那么如何提高并发性和可伸缩性呢? 从我所知,因为rails通过控制器同步处理请求,然后写入redis,即使node.js结束可以asynchronous拾取队列,请求仍将被阻塞。 (我有一种感觉,它不是asynchronous的,但如果不是端到端的非阻塞)。 如果redis是中介,node.js会被认为是代理还是应用程序? 我是redis的新手,仍然在学习。 如果我为我的后端数据库(如mongoDB或couchDB)使用100%的noSQL解决scheme,它们可以被redis完全replace,或者redis更像是一个类似rabbitMQ的消息队列工具吗? 消息队列是一个不同于线程或事件循环模型的并发概念,还是应该补充它们? 这就是我的问题。 我是消息队列概念的新手。 将欣赏任何帮助和指向正确的方向和文章,帮助我了解更多。 谢谢。

实时聊天,不想丢失消息 – 使用队列(redis,zeromq)?

我有一个应用程序,有一些实时聊天。 聊天是在客户端和服务器端(nodejs)使用Faye实现的。 现在这个客户端聊天被用在rails应用程序中,当我的页面重新加载/刷新时,我不想丢失在以下情况下可能发生的消息: 我重新加载页面 我从DB获取聊天logging 聊天对方的用户写入5行 我呈现的页面 我错过了5个最近的logging 我想听听你对解决这个问题的意见。 我有一个类似于消息队列的东西,在那里没有传递给客户端的消息只是在那里等待,并在以后通过javascript来访问页面。 我也希望你的意见,如果有人证实,消息队列是适合使用zeromq或在redis中实现简单的队列,我已经使用(不想要很多技术)。

如何configuration,运行,监视和pipe理多个不同的节点服务?

我正在开发一个大型系统(MEAN Stack + ElasticSearch + RabbitMQ),有许多不同的nodejs项目和队列一起工作。 我有几个问题。 当我想运行和testing整个系统时,我必须打开很多terminal窗口来运行每个项目。 我怎样一次运行它们,方便监控。 当我想在多台机器上运行同一个项目时,我怎样才能轻松configuration所有这些项目,因为有时需要花费太多时间来移动并configuration它们。 如何轻松configuration,运行,监控和pipe理整个系统。 例如,我想知道有多less台机器正在运行一个项目。 或者有时候我想要一次更改消息队列名称或IP地址,我不想去两个项目中的每台机器上都改变它们 对不起,我的坏语法,感觉自由的编辑。 提前致谢。

带有aerospike和node.js的任务pipe理器

我在networking应用程序中使用node.js和aerospike。 当用户发帖,提及或追随时,我必须在时间表或/和通知上进行工作。 我想在node.js向客户端发送响应之后运行这些作业。 我跑任务经理和邮件经纪人,我不知道明白 所以我的问题是因为Node.js中的操作是asynchronous的,并且aerospikeis同步和multithreading – >将响应发送到客户端,然后用aerospike做这些工作是不好的主意(或者我可能会因复制,云,等等) 或者我被迫使用像RabbitMQ?

避免redis竞赛状况

我试图找出如何在更新redis时避免竞争状况。 这是我的场景:由于查询参数长度的限制,我有一个消息被分解成了多个http GET请求。 我使用redis来存储临时消息块,当我拥有所有的块时,我将它们连接起来并存储在数据库中。 块标有一个消息ID,我将这些块存储在一个'$'分隔的string中,由消息ID键入。 当我得到一个新的块时,我得到块string,然后追加新的块+'$',并将其设置回redis。 问题是我很担心,如果我打电话给set,并且set命令在我下一次获得之前没有完成执行,我将不会有最新的块string。 如果我有一个单一的Redis客户端,也许这将缓解这个问题,因为大概这些命令是按照服务器上接收到的顺序执行的? 任何洞察赞赏,包括build议如何构build消息重新组装的方式更为理智? 谢谢。

使用AMQP和Node.JS实现实时数据同步

我正在构build一个基于Web的生产力应用程序,它必须处理适度的用户并发性,并且我一直在探索各种选项来保持服务器和客户端之间的数据同步。 应用程序数据在页面加载时被引导到JavaScript中,并且使用websocket将数据推送到服务器。 对于上下文来说,我正在使用Node.JS和Socket.IO创build一个持久的客户端 – 服务器网关,它充当Django后端的代理。 面临的挑战是我希望保持所有连接的客户端彼此同步,以便在一个客户端会话上对应用程序进行的任何更改都立即反映在所有连接的客户端会话上。 难点在于不是所有用户都必须查看所有的数据; 有各种不同的用户级别,不同的用户可以拥有略有不同的数据集。 因此,当一个对象以某种方式被改变并且改变被提交给数据库时,我需要知道那些当前连接的用户可以安全地将数据推送到数据库。 我一直在探索不同的解决scheme,我觉得这是可以通过pubsub消息队列来处理的 – 使用AMQP之类的东西,但是我正在努力弄清楚应用程序的结构。 在我的脑海中,应用程序结构如下所示: Client < – > Node.JS gateway < – > AMQP messaging queue < – > Django app 我应该创build一个单一的直接交换,将Node.js和Django实例视为单个客户端,然后在Node.js中以某种方式过滤结果? 或者是这种过滤的东西,消息系统可以处理,每个连接的客户端订阅相关的主题,例如,只接收他们被允许看到的数据? 我从事消息传递系统方面的经验很less,所以我很难在应用程序中find自己能够扮演的angular色。 任何build议将不胜感激。

这是我正在使用的正确结构 – (kue,集群,节点)

嗨,我正在与kue , 群集 , redis ,node.js。 这里是一个非常简单的例子,稍后我会从外面调用testing函数。 我的目的是将一些传入作业添加到队列中并使用工作人员进行处理。 在我的情况下,当一个用户使用我的应用程序完成一个订单,他会收到一封电子邮件。 我会把电子邮件的详细信息发送到队列并使用工作人员进行处理。 var cluster = require('cluster'); var kue = require('kue'); var jobs = kue.createQueue(); var max_workers = 3; function test() { jobs.create('email', { title: 'welcome email for tj' , to: 'tj@learnboost.com' , template: 'welcome-email' }).save( function(err){ if( !err){} console.log( "no error"); }); if( cluster.isMaster ) { for […]

如何使用消息队列解决特定的客户端/用户?

我开发了一个带有node.js和socket.io的拍卖平台。 但是,我想用消息队列replacesocket.io。 虽然我在实现基于套接字的拍卖平台方面没有任何问题,但我不知道如何通过消息队列来实现这一点。 我不明白的主要是如何解决特定的客户端/用户。 用socket.io我有socket.id: io.sockets.connected[socket.id].emit('notify', msg) 这是如何处理消息队列,如Redis Simple Message Queue ? 如果有人能解释我是如何工作的,我会很高兴。