Tag: rabbitmq

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,请告诉我:) 请给我你的意见。 谢谢!

垂直和水平地缩放Socket.io – 什么是“正确的”方式?

我想纵向和横向扩展我的Node.js套接字应用程序,我还没有find一个复杂的解决scheme。 我的应用程序有两个用例: 将消息从一个用户广播到所有其他用户 将消息从一个用户推送到一部分用户 一方面,我已经读过,我需要Redis和socket.io-redis 另一方面,我观看了这个video ,看到这个回答说Redis不可靠,并且不能保证发布的消息到达 ,所以你只能用它来进行聚类/垂直缩放 使用ServiceBus的 Microsoft Azure解决scheme是没有问题的,因为我不想使用Azure。 这个人不是Redis,而是推荐使用RabbitMQ进行水平缩放。 对于垂直缩放,还有一个用于节点进程的IPC,即socket.io- clusterhub ,但它似乎只能在Socket.io <= v0.9.0 然后有这个人 ,他已经实现了自己的方法通过HTTP请求传递消息到其他节点,这是有道理的。 但为什么HTTP请求,如果你也可以build立服务器之间的直接套接字连接,同时推送消息到所有的服务器,克服从一个服务器到另一个延迟? 作为一个结论,我想也许我可以在每个服务器上使用Redis ,只是为了在多个进程中集中我的应用程序时交换消息,以及RabbitMQ作为S2S通信解决scheme。 但是有一个Redis per Server和另外一个RabbitMQ似乎有些过火了。 是否有任何已知的更短/更好的解决scheme来双向可靠地扩展Socket.io? 编辑:我已经尝试使用单个Redis服务器多个Node.js服务器,其中每个服务器通过所有核心上的粘滞会话使用群集。 虽然群集在自己的作品像redis的魅力,使用多个服务器似乎有问题。 消息不会到达其他节点 。

SocketIO缩放架构和大型机房要求

我们在一个大型聊天应用程序上使用socketIO。 在某些情况下,我们希望向所有其他用户发送“状态”(用户可用性)。 io.in('room1').emit('availability:update', {userid='xxx', isAvailable: false}); room1可能包含很多用户(最多500个)。 当许多可用性更新被触发时,我们观察到NodeJS负载的显着提升。 这个想法是使用与Socket IO类似的Redis存储。 让Web浏览器客户端连接到不同的NodeJS服务器。 当我们想要发射到一个房间时,我们使用Redis PubSub ZeroMQ甚至RabbitMQ将“发射到房间1”的有效载荷分配给所有其他的NodeJS进程。 每个进程都会自己调用他自己的io.in('room1').emit 。 对这种设置的关注之一是进程间的通信可能变得相当繁忙,我想知道它是否会在未来成为一个问题。 这是我想到的架构。

如何在Heroku上与Node.js交streamWeb和Worker dynos?

Web Dynos可以处理HTTP请求 当Web Dynos处理它们时, 工作者Dynos可以从中处理作业。 但是我不知道如何让Web Dynos和Worker Dynos互相沟通。 例如,我想通过Web Dynos接收HTTP请求 ,把它发送给工人Dynos ,处理作业并将结果发送给Web Dynos ,在网上展示结果。 这是可能的Node.js? (用RabbitMQ或Kue等)? 我在Heroku文档中找不到一个例子 还是应该在Web Dynos中实现所有代码,并只能扩展Web Dynos ?