Tag: amqp

要么“当-js”或基本的amqplib rabbitmq nodejs教程不工作

我有最新版本的nodejs(0.10.21,amqplib(0.1.0)( https://github.com/squaremo/amqp.node.git )和rabbitmq(3.2.0))。 启动rabbitmq-server 在安装npm包之后,转到amqp.node / examples / tutorials并运行./send.js。 它报告: [x] Sent 'Hello World!' 从rabbitmq的Web控制台,我可以看到它创build的连接,它创build队列“你好”。 但是,它实际上不会将任何消息发布到队列中。 除了RPC客户端/服务器外,其他教程都不适用于我 – 它们将创build交换,队列和通道,但不会发布消息。 我的一个朋友使用所有相同的版本运行正常,除了OS X 10.6,而不是10.8。 我使用节点检查器遍历了amqplib代码,看不到任何明显的错误。 它看起来好像没有创build消息框架,但在那个层面上,我现在还没有真正的想法。 当我通过Web控制台或使用Bunny + Ruby发布消息时,它会创build一个队列并按预期发布消息,所以它必须是node,amqp和/或OS X 10.8而不是rabbitmq的问题。 rabbitmq日志(拖尾两个日志)只提到连接打开,然后很快closures,但不报告任何错误: =INFO REPORT==== 27-Oct-2013::20:46:16 === accepting AMQP connection <0.731.0> (127.0.0.1:56927 -> 127.0.0.1:5672) =INFO REPORT==== 27-Oct-2013::20:46:16 === closing AMQP connection <0.731.0> (127.0.0.1:56927 -> 127.0.0.1:5672) 我嗅探了从amqp节点发送到rabbitmq的数据包。 这来自运行示例/教程中第一个示例“send.js”的amqp.node: http://www.limorph.com/files/amqp_amqnode_send.txt […]

如何正确检查在Node.js中重新连接后是否打开RabbitMQ通道?

我正在使用amqplib ,我试图实现重新连接机制。 但是,连接重新build立后,看起来我的频道仍然closures。 我该如何解决这个问题? 这是我的代码。 var pubQueue = []; module.exports = { connect: function (callback) { var self = this; amqp.connect(config.queue.url, function(err, connection) { if (err) { console.error("[AMQP]", err.message); return setTimeout(module.exports.connect, 2000); } connection.on("error", function(err) { if (err.message !== "Connection closing") { console.error("[AMQP] conn error", err.message); } }); connection.on("close", function() { console.error("[AMQP] reconnecting"); return setTimeout(module.exports.connect, […]

如何连接节点的amqplib与SSL连接?

我试图连接我的RabbitMQ服务器,它被迫使用SSL,并用用户和密码保护。 以前,我成功地从C#,PHP和Python应用程序连接到此服务器。 这是我的node.js代码: const amqp = require('amqplib'); const fs = require('fs'); const config = {…} const opts = { ca: [fs.readFileSync(config.certificatePath)] }; const url = `amqps://${config.username}:${config.password}@${config.hostname}:${config.port}`; const open = amqp.connect(url, opts); open.then(function(conn) { console.log('connected.'); }).then(null, console.warn); 我得到的错误是:无法获得本地发行者证书 1)错误是什么意思? 2)我需要做什么才能连接? 注意:在图书馆的ssl指南中写着“(必须)提供一个选项对象,它将被传递给tls.connect() 。 我无法理解这个指令,也没有tls.connect()使用的例子。 我尝试了一些变化,但失败了,也许会给这里的某个人提供线索。

AMQP使用Node.js,我如何发布/订阅?

我正在做一个类来操作这里提供的Node-AMQP模块: https : //github.com/postwait/node-amqp 但是我不能使用这个发布/订阅: var Queue = require('./Queue.js'); var queue = new Queue(); queue.addTaskToQueue('salut', 5); queue.subscribeTaskQueue('salut'); 这里是我正在使用的类(我在CoffeeScript中给出代码,在Node.js中给那些不知道CoffeeScript的人): 谢谢你的帮助。 在CoffeeScript中: amqp = require('amqp') class Queue constructor: (ip = 'localhost') -> @ip = ip @receivedObject @connection = amqp.createConnection({ host: @ip }) @queue subscribeTaskQueue: (queueToSubscribe) -> self = @ self.connection.on('ready', -> q = self.connection.queue(queueToSubscribe) q.bind('#') q.subscribe({ ack: […]

RabbitMQ + Node.JS连接问题,帧大小太大?

我一直在玩apache + php的RabbitMQ,想看看它和Node.JS的性能比较。 使用最新的node.js(0.4.12)和amqp模块(npm install amqp),我得到一个未知的exception连接,看起来像是导致错误的帧大小(amqp.js中的第181行),将错误从代码只是抛出另一个相关的分配太大的数组大小。 RabbitMQ服务器只是默认configuration的“apt-get install rabbitmq-server”。 这在PHP中工作就好了。 Starting … AMQP URL: amqp://localhost events.js:47 throw new Error("Uncaught, unspecified 'error' event."); ^ Error: Uncaught, unspecified 'error' event. at Connection.emit (events.js:47:15) at AMQPParser.onError (/nodeJS_stuff/node_modules/amqp/amqp.js:839:12) at AMQPParser.throwError (/nodeJS_stuff/node_modules/amqp/amqp.js:145:25) at AMQPParser.execute (/nodeJS_stuff/node_modules/amqp/amqp.js:181:18) at Connection.<anonymous> (/nodeJS_stuff/node_modules/amqp/amqp.js:851:12) at Connection.emit (events.js:64:17) at Connection._onReadable (net.js:672:14) at IOWatcher.onReadable [as callback] (net.js:177:10) 有没有遇到过这个? […]

NodeJS AMQP客户端无法连接

我疯了最近两天,我不能连接在持久交换和持久队列的NodeJS客户端。 所以PHP代码创build并发送消息: <?php $connection = new AMQPConnection(array( 'host' => 'localhost', 'vhost' => 'bvh', 'port' => 5672, 'login' => 'bizneus', 'password' => 'lozinkus' )); //$connection = new AMQPConnection(); $connection->connect(); if (!$connection->isConnected()) { die('Not connected :(' . PHP_EOL); } // Open Channel $channel = new AMQPChannel($connection); // Declare exchange $exchange = new AMQPExchange($channel); $exchange->setName('biznea_e_1'); $exchange->setType('fanout'); $exchange->setFlags(AMQP_DURABLE); $exchange->declare(); […]

使用mockstestingnode-amqp

我有一个使用AMQP执行远程过程调用的节点服务,因此它将消息发布给给定的amqp交换,并期望在给定的amqp队列上响应该调用的结果。 我正在寻找一个好的unit testing策略,嘲笑amqp连接可以发送一个基于给定input的消息。 我已经看了看amqp-mock模块,但这似乎需要连接到一个真正的amqp服务器,这是我想避免的。 有没有人执行过类似的事情或有一个好的策略?

使用amqplib控制Node.JS,控制RabbitMQ使用者的使用率

我的应用程序使用RabbitMQ队列来存储消息,然后我有一个工作人员消费这些消息,并将其插入到数据库中。 目的不是强调工作负载高峰期的数据库。 我遇到的问题是,在那些高峰期,队列的发布率真的很高,工作人员每秒钟开始接收的消息比它能处理的时间多,直到它崩溃。 有什么办法来控制消费率,所以我可以确保工人收不到消息比消耗更快? 信息并不重要,所以我不介意他们有多less时间入队,直到工作人员能够处理。 我使用的Node.JS amqplib,这是我使用的工人代码: open.then(function(conn) { var ok = conn.createChannel(); ok = ok.then(function(ch) { ch.assertQueue(q); ch.consume(q, function(msg) { if (msg !== null) { message = JSON.parse(msg.content.toString()); processMessage(message); } }, {noAck: true}); }); return ok; }).then(null, console.warn);

如何发送一个消息给所有的订阅者,除了发布者也是同一个rabbitMQ队列上的一个侦听器

我有一个由nodeJS服务器安装的rabbitMQ。 我使用rabbit.js库与兔子进行交互,到目前为止,我对此感到满意。 我在扇出模式的同一个队列中有多个用户,每个节点都是一个订阅者,也是一个发布者,这对我很有好处,并且工作正常,因为在很多情况下,我想通知所有服务器一些发生的更新在这些节点之一(这也是出版商…) 我偶然发现一个情况,我需要发送队列中的所有侦听器的消息,除了发送它的人(这也是同一队列中的侦听器)。 我不知道谁在监听(可能有一个,可能有几百万),所以我不能通过一些白名单的路由规则将它路由到一些特定的节点。 它必须是某种排除通配符路由规则(一些黑名单),例如,发送这个消息给每个人听谁不对应我自己的唯一ID … 可以使用rabbit.js来完成吗? 它可以甚至在rabbitmq以某种方式完成? 我不太了解那只兔子,所以要对我温柔:) 顺便说一句,如果你知道如何使用rabbit.js,甚至更好… 编辑:: 根据Derick Bailey的要求,这是我需要这个的原因 我有一个系统,其中有许多负载平衡的nodeJS服务器作为web服务运行。 他们是完全透明的。 他们都不知道哪些其他节点存在。 我想保持这种方式,因为这种分离使我更容易通过添加和删除其他“并行”节点来更好地扩展。 这些节点中的每一个都有自己的内存本地caching服务。 我偶然发现了一个单个节点更新某个实体的情况。 现在我需要使这个节点可以通知所有其他并行节点(可能在caching中具有相同的实体)使其无效。 问题在于发送消息的节点(更新节点)也会收到消息,因为他也是一个监听者。 所以我希望他以某种方式排除自己的特定消息的接收者列表…因此需要一些路由黑名单。 (他知道自己,所以除了自己的身份证之外,我可以让他通往所有人……但即使有人确实在听另一端的话,他也不知道……所以它不能成为白名单) 希望我的需要现在更清楚。 我已经想到了解决我的问题,但它需要额外的发展在我身边,我想通过使用兔子的当前能力(如果可能的话),以避免它我可以只添加一个唯一的ID的内容的消息。 那么发送节点可以认识到这个消息来自他并忽略这个消息。 但正如你可以明白,这可能会变得棘手,因为我需要考虑更多的陷阱和其他边缘情况下可能会失败… 如果有人能告诉我如何使用一些兔子现有的configuration,我会很高兴听到如何:)

头文件在Node.js中使用RabbitMQ交换示例

我一直在寻找在Node.js中使用RabbitMQ的headers exchange示例。 如果有人能把我指向正确的方向,那就太好了。 以下是我到目前为止: 发布者方法 (创build发布者) RabbitMQ.prototype.publisher = function(exchange, type) { console.log('New publisher, exchange: '+exchange+', type: '+type); amqp.then(function(conn) { conn.createConfirmChannel().then(function(ch) { publishers[exchange] = {}; publishers[exchange].assert = ch.assertExchange(exchange, type, {durable: true}); publishers[exchange].ch = ch; }); },function(err){ console.error("[AMQP]", err.message); return setTimeout(function(){ self.connect(URI); }, 1000); }).then(null, console.log); }; 发布方法 RabbitMQ.prototype.publish = function(exchange, routingKey, content, headers) { try { […]