Articles of rabbitmq

RabbitMQ和Sails.js

我在使用我的Sails应用程序时遇到了麻烦。 我不确定在哪里放置用户代码。 我想要做的是构build一个通知系统,以便当pipe理员批准用户的数据请求时,用户的仪表板将popup类似于Facebookpopup通知的通知。 问题是,将用户代码放在我的仪表板控制器的显示path中似乎永远不会获取发布的消息。 任何build议将不胜感激。 目前使用rabbit.js包连接到RabbitMQ。

amqp.node不会检测到连接丢失

我们有一个运行socket.io服务器的nod​​e.js脚本,它的客户端使用RabbitMQ队列中的消息。 我们最近已经迁移到Amazon AWS,RabbitMQ现在是两台机器(冗余实例)的集群。 AMQP连接会不时丢失(这是一个限制,从具有冗余VM的高可用性环境到达,我们必须应付它),如果尝试重新连接,DNS将select要连接的实例它是一个具有数据复制的集群,因此连接哪个实例并不重要)。 问题是重新连接的尝试从来没有做过; 一段时间后,当连接丢失时,amqp.node显然没有注意到连接已经丢失。 此外,消费者停止接收消息,并且socket.io服务器停止接受新的连接。 我们在RabbitMQ URL处设置了55秒的心跳超时(不要与socket.io心跳超时相混淆),并使用amqp.node的callbackAPI检查“错误”和“closures”事件,但显然从未发出。 队列期望消耗的消息被消除。 我们希望节点脚本检测丢失的连接并自行完成,因此环境将自动启动新的进程并重新build立连接。 这里是代码,也许我们正在做一些错误的amqp.nodecallbackAPI或其他东西。 var express = require('express'); app = express(); var http = require('http'); var serverio = http.createServer(app); var io = require('socket.io').listen(serverio, { log: false }); var socket; var allcli = []; var red, blue, green, magenta, reset; red = '\033[31m'; blue = '\033[34m'; green = […]

RabbitMQ和node-amqp:在确认模式下交换不确认 – 为什么?

我正在编写一个依赖于RabbitMQ的Node.js应用程序。 我使用node-amqp作为连接到RabbitMQ的select库。 一旦build立了与RabbitMQ的连接,我要做的第一件事是创build一个交换: var options = { autoDelete: false, confirm: true, durable: true, type: 'direct' }; connection.exchange('myExchange', options, function (myExchange) { // … }); 这完美的作品。 正如你所看到的,我使用confirm: true来创build交换,因此我期望交换在之后处于确认模式。 现在,一旦我尝试发布消息,就会出现问题: var options = {}; myExchange.publish('', { data: 'foobar' }, options, function () { // … }); 问题是publish函数的callback从来没有被调用 – 虽然这个消息已经成功发布了(正如我在RabbitMQ的webpipe理工具中看到的那样)。 我以错误的方式了解确认模式吗? 这是node-amqp的错误吗? 任何帮助,将不胜感激 :-)

node-amqp不能发送消息给RabbitMQ

我正在使用rabbitmq-tutorials ,ruby版本正常,但是node.js版本不能发送消息。 我不知道什么是错的。 var amqp = require('amqp'); var amqp_hacks = require('./amqp-hacks'); var connection = amqp.createConnection({host: 'localhost'}); connection.on('ready', function(){ connection.publish('hello_node', 'Hello World!'); console.log(" [x] Sent 'Hello World!'"); amqp_hacks.safeEndConnection(connection); }); 在运行node send.js ,运行进程node recv.js不能node recv.js任何东西。 而rabbitmqctl list_queues不显示hello_node队列。

分布式工作者的架构

我们正在创build一个能够跨多个地理位置分发任务的网站。 该网站应该能够: 创build一个任务, 把它放在队列中, 根据地理标准将其分配给工作人员, 根据工作状态更新网页界面(步骤1,2,3等), 将最终结果保存在mongodb中并注意web界面。 只要他们不在相同的地理标准,我们就可以有平行的工作。 只要不处于处理状态,我们可以删除一个作业。 我们目前的堆栈是:Angulajs – nodejs – mongodb。 我们的第一个想法是从远程工作人员到MongoDB任务build立一个HTTP池。 重点是我们将有20多个遥远的工作人员,我们希望高频刷新(<1s)。 我们认为这个解决scheme很容易实现,但是很难维护和使数据库超载。 此解决scheme高度依赖于networkingping。 在networking上进行了一些研究之后,我们find了有关rabbitMQ和消息系统的文档。 这似乎符合我们的大部分要求,但是我看不到我们如何才能在待处理状态下删除队列中的特定作业,以及如何轻松处理任务状态的更新。 我们还find关于redis的文档,RAM中的KV系统。 这解决了这个问题,可以删除队列中的特定任务,并减lessmongodb的负载,但是我们没有看到我们如何能够注意到远方的工作人员在工作中做的事情。 如果是HTTP池,我们就失去了所有的好处。 我们的情况似乎是一个常见的问题,我想知道最好的解决scheme是什么?

RabbitMQ与nodejs

我试图从nodejs程序build立与RabbitMQ的连接。 但它没有build立联系,也没有发生错误。 我的代码如下。 任何build议,请。 var amqp = require('amqp'); var connection = amqp.createConnection({url:"amqp://guest:guest@localhost:15672"}); connection.on('ready', function(){ var q = connection.queue('jsonmsg', function(q) { console.log('connected'); q.bind("#"); q.subscribe(function (message) { console.log('on connection' + message); }); }); });

Node-amqp – X尝试后拒绝消息

我如何实现几个可configuration的requeue尝试后拒绝消息的机制? 换句话说,如果我正在订阅一个队列,我希望保证相同的消息不会再多出现X次。 我的代码示例: q.subscribe({ack: true}, function(data,headers,deliveryInfo,message) { try{ doSomething(data); } catch(e) { message.reject(true); } }

在Heroku上的NodeJS worker重新启动后恢复排队的作业

所以我在Heroku上有一个相当简单的设置。 我正在使用RabbitMQ来处理后台作业。 我的设置由每天使用Heroku Scheduler插件运行的节点脚本组成。 这些脚本将作业添加到队列中,然后工作人员将其消耗并委托给单独的模块进行处理。 我收到一个SIGTERM事件, Heroku不时随机启动,重新启动实例之前,问题就开始了。 出于某种原因,在实例重新启动后,工作人员再也不会恢复。 只有当我通过做heroku ps:scale worker=0和heroku ps:scale worker=1来手动重新启动时,worker才会继续使用未完成的作业。 这是我的工人: // worker.js var throng = require('throng'); var jackrabbit = require('jackrabbit'); var logger = require('logfmt'); var syncService = require('./syncService'); var start = function () { var queue = jackrabbit(process.env.RABBITMQ_BIGWIG_RX_URL || 'amqp://localhost'); logger.log({type: 'msg', msg: 'start', service: 'worker'}); queue .default() .on('drain', onDrain) .queue({name: […]

我可以在node.js中指定RabbitMQ凭据吗?

我开始使用rabbit.js从node.js应用程序连接到RabbitMQ。 我被封锁在: 错误:服务器closures通道:403(ACCESS-REFUSED),并显示消息“ACCESS_REFUSED – 在默认交换机上不允许操作” 在Channel.C.accept(/…/rabbit.js/node_modules/amqplib/lib/channel.js:398:24) 在Connection.mainAccept [as accept](/…/rabbit.js/node_modules/amqplib/lib/connection.js:63:33) 在Socket.go(/…/rabbit.js/node_modules/amqplib/lib/connection.js:448:48) 在Socket.EventEmitter.emit(events.js:92:17) … 这是预期的,因为我使用的RabbitMQ实例被configuration为要求发布者和订阅者在能够使用消息队列之前提供凭证,并且禁用了来宾帐户。 rabbit.js的官方文档没有提到凭证。 谷歌search“rabbit.js指定凭据”和“rabbit.jslogin密码”是不确定的。 rabbit.js是否支持证书? 如果没有,那么Node.js的其他RabbitMQ客户端是否支持它们?

想要select:Node.js Meteor.js Ratchet RabbitMQ实时WebChat(论坛)

在提出这个问题之前,我做了一些研究,但却找不到具体的答案。 我想创buildWebChat实时同步到服务器上的数据库。 (MySQL或MongoDB – 一切正常)但关于同步数据有几种方法来做到这一点: Ratchet的PHP + websockets和我的工作只是通过JSON创build一个协议来授权和消息。 许多文档,许多教程。 (我知道websockets在IE中不起作用,但是不pipe用) node.js + socket.io – 有相同的技术解决scheme1,但在不同的语言。 node.js + meteor.js(sockJS) – 似乎人们都工作,我不需要添加任何协议function,只是编码的逻辑。 但是,如何高负荷? 怎么样的文件…非常年轻的框架。 龙卷风+ TornadIO2(socket.io)+ RabbitMQ 任何人都可以比较RabbitMQ与meteor.js? 性能。 谁能说哪个方法更好? 我不知道所有的框架,所以如果我有更好的select,请告诉我:) 请给我你的意见。 谢谢!