Articles of node amqp

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队列。

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

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