Tag: rabbitmq

如何停止绑定到AMQP默认交换?

每次我将一个AMQP队列绑定到一个交换机上,它似乎自动绑定到“默认”直接交换。 以下是使用rabbitMQ服务器和node.js的代码: var amqp = require('amqp'); var connection = amqp.createConnection({host:'localhost'}); connection.on('ready', function(){ var q = connection.queue('test_queue_name'); var exc = connection.exchange('test_exchange', { autoDelete:true }); q.bind('test_exchange', 'test.key'); }); 以下是使用“rabbitmqctl list_bindings”命令时的控制台输出: Listing bindings … exchange test_queue_name queue test_queue_name [] test_exchange exchange test_queue_name queue test.key [] …done.

如何使用node-amqp获取队列中的消息数量

我在节点应用程序中使用node-amqp作为排队系统。 我希望能够监视队列的状态,以确定是否有足够的工作人员正在运行,即如果队列大小正在增加,我们知道我们已经开始落后了。 我知道,从命令行你可以使用类似的东西; rabbitmqctl list_queues 这给了我需要的确切信息,但是我想知道是否有任何方法可以从node-amqp本身执行此操作? 提前致谢。 编辑 最后,我只是使用命令行工具rabbitmqctl来获取我需要的信息,这不是一个很好的解决scheme,但这是我做的; var Logger = require('arsenic-logger'); getQueueMeta(function(info){ Logger.info(info); }); /** * Returns a sparse array with the queue names as the indices * and the number of messages as the value, eg; * * info = [ my-queue: 9, my-other-queue: 1 ] * * @param callback */ function […]

RabbitMQ:如何限制消费率

我需要限制从rabbitmq队列中消费消息的速度。 我发现了很多build议,但是其中大多数提供使用预取选项。 但是这个选项并没有做我所需要的。 即使我将预取设置为1,速率也是大约6000个信息/秒。 这对消费者来说太多了。 我需要每秒限制大约70到200条消息。 这意味着每5-14ms消耗一个消息。 没有同时消息。 我正在使用Node.JS和amqp.node库。

如何从amqplib库使用node.JS的channel.assertQueue函数?

我正在开发一个使用RabbitMQ和Node.JS的消息应用程序。 我正在使用amqplib来达到这个目的。 我是Node.JS的新手,在理解amqplib的语法时遇到了一些困难。例如有一个声明队列的函数,那就是 channel.assertQueue([queue, [options, [function(err, ok) {…}]]]); 我从前2-3天一直提到这一点 ,但我仍然不清楚这些 – > err和ok 。 如何使用这些参数? 一个例子将非常感激。

有没有使用RabbitMQ和Node.js长期运行的过程?

我想了解在Node.js中处理长时间运行任务的最佳方法。 显然,在Node.js中执行长时间运行的过程并不是一个好主意,因为节点的单线程性质。 我是RabbitMQ的忠实粉丝,所以我正考虑在两个节点之间放置两个带有兔子的节点服务器: Node.js Web Server <–> RabbitMQ <–> Node.js Backend Worker 当然这个想法是不要放慢Web服务器的速度。 我通常会用Javareplace后端服务器,但我试图保留所有的JS。 我不是一个节点程序员,所以我不确定这是一个好主意,甚至可能吗? 有没有人尝试过这样的事情?

RabbitMQ – 名称为“amq.gen- *”的随机队列正在自动生成

我有一个设置发送消息到服务器(NodeJS)的持久队列和客户端(Android应用程序)在各自的队列(每个Android设备收听相应的队列是唯一的)听消息。 根据RabbitMQ文档,当我们尝试连接到一个空名称(即“”)的队列时,RabbitMQ会生成一个名称以“amq.gen-”开头的随机队列。 但是,没有从客户端或服务器代码的地方看到,我正尝试连接到一个空名称的队列,但仍然看到大量的随机队列正在生成。 任何人都可以帮助我理解其他情况下可能会创build名称为“amq.gen- *”的随机队列吗?

Heroku上的Node JS消息队列

我需要将在Heroku上运行的Node JS服务器移动到消息队列体系结构中。 目前,服务器收到一个HTTP请求,做一些处理,并作出响应。 问题是处理需要一些时间,特别是当有很多请求时。 这种冗长的处理时间会导致服务器超时,超载和崩溃! 我的阅读告诉我需要一个后台工作人员来处理。 我对消息队列和后台工作者没有任何经验,我正在寻找一个非常简单的例子来开始。 任何人都可以build议一个简单的,可以理解的模块或例子来开始? 我发现了一些例子,但它们很复杂,我迷路了! 我想要一个我可以build立的准系统的例子。

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的错误吗? 任何帮助,将不胜感激 :-)