Tag: rabbitmq

在一个NodeJS进程中使用多个队列可以吗?

我有一个过程,它应该处理两种不同types的消息,并以相似但不同的方式处理它们。 当然,我会使用两个单独的队列这两种消息,并调用消耗()两次。 另一种可能性是只有一个队列,并且在内容缓冲区内由某种“消息types”属性区分,并在交换机中处理每个消息。 哪个会是更“推荐”的方式呢? 使用这两种方法有什么优点/缺点?

如何在Node.js中以编程方式获取远程运行的RabbitMQ服务器的版本?

我有一个使用rabbot连接到RabbitMQ的节点服务器。 这工作正常,我可以发布消息,消费消息等 现在我希望能够问RabbitMQ服务器它正在运行的版本。 我希望我能够发布一个消息询问版本,并通过答复队列得到答案。 或者我也可以通过HTTP进行请求,我没有偏好。 但奇怪的是,我找不到这样做的任何方法。 因此,我的问题:我怎样才能以Node.js编程方式获得远程运行的RabbitMQ服务器的版本? 非重复: validationrabbitmq的版本 以上不是重复的,因为它不需要以编程方式find版本,也不提供任何Node.js解决scheme。 另外,大多数解决scheme只适用于本地的rabbitmq-server,而不是远程的。

RabbitMQ:`rabbitmqctl list_exchanges`下的'direct'标题是什么意思?

如果我使用php的amqp类创buildexchangem交换types设置为direct和唯一的选项指定是durable ,然后尝试连接到node.js交换,我得到一个Cannot redeclare exchange with different options error你看到如果你的select不匹配。 但是,据我所知,我正在使用完全相同的选项(键入直接和选项持久)。 所以我做了一个testing,并在php中创build了一个名为php_exchange交换和一个名为node_exchange node.js,并运行rabbitmqctl list_exchanges并获得了一些有趣的输出: Listing exchanges … node_exchange direct amq.headers headers amq.direct direct amq.match headers amq.fanout fanout direct php_exchange direct amq.topic topic …done. direct标题在这种情况下意味着什么(显然它不是直接types的所有交换,因为它将node_exchange列为直接types)? 我怎样才能得到node.js创build一个相同的amqp交换(以便它不会失败时,连接到一个持久的交stream)? 我正在使用PECL php amqp库和node-amqp库(https://github.com/ry/node-amqp) 谢谢。 编辑: 以下是rabbitmqctl list_exchanges name type auto_delete internal arguments的输出(为简洁起见,删除了其他交换): Listing exchanges … node_exchange direct false false [] php_exchange direct […]

在Node.js中使用node-amqp模块进行手动确认

我正在使用postwait模块node- amqp。 我能够发布/订阅队列的一些消息,但我想手动确认消息。 例如,我希望消息被读取并且不被确认,然后对这个消息执行一些计算,然后发送一个q.shift()来确认消息并且通过第二个消息。 我想要确认手动使用。 其实我有一个允许订阅国旗{ack: false}的函数,那么我有一个函数来手动创build一个q.shift() (如文档中所述)。 但是,当我发布2条消息,然后我读了2条消息,没有确认,我看到了2条消息。 但是我希望子文件重复最初收到的同样的信息,直到我不承认它。 我怎样才能使用这些方法?

RabbitMQ(和node.js)中的asynchronous确认

我有一个RabbitMQ的具体使用案例,我想澄清一些事情,并要求build议。 考虑这种情况: 1 – 我发布两个消息,即要执行的任务:messageA然后messageB 2-我的消费者得到messageA,执行包含在这个消息中的任务,但是当任务正在运行时,服务器崩溃 我的问题是:当服务器重新启动时,messageA将被重新sorting,并且会在messageB(与崩溃之前的顺序相同)之前重新sorting? 据我所知,messageA会丢失,如果服务器崩溃,因为我的消费者默认情况下收到消息后确认。 所以我的想法是单独使用和确认消息:先消耗,运行任务,然后在任务成功执行后确认消息。 你觉得这个方法有问题吗? 你会build议我做其他事吗?

如果接收器没有运行,Node.js RabbitMQ消息会丢失

这是我的问题 1.如果接收器先启动然后发送消息,则消息被传送 2但是,如果接收器没有启动,那么代码表示发送的消息,但启动接收器不会得到消息。 如果我使用pika在Python中尝试相同的顺序,那么事情似乎正常工作。 我还validation没有使用rabbitmqctl –list_queues命令的消息 我正在运行node.js 0.70并在Ubuntu 11.04 64位版本上运行 我在我的send.js中有以下代码 var util= require('util') var amqp = require('amqp'); var connection = amqp.createConnection({host:'localhost', login:'guest', password:'guest'}); var pubMessage = function pubM(msg) { var x = connection.exchange(); var q = connection.queue('helloNode', { autoDelete: true, durable: false, exclusive: false } ); x.publish('helloNode',{helloNode: "This is a message"}); }; connection.addListener('ready', pubMessage); […]

ETIMEDOUT与node.js&amqp的问题

我有两个生产者和两个消费者在我的项目中使用rabbitmq通过node.js中的amqp模块。 为消费者build立连接的代码如下所示: function init_consumers( ) { console.log( 'mq: consumers connection established. Starting to init stuff..' ); global.queue.consumers.connection = con_c; var fq_name = global.queue.fq_name; var aq_name = global.queue.aq_name; var q_opts = { durable:true }; var subscr_opt = { ack: true, prefetchCount: 1 }; var fq = con_c.queue( fq_name, q_opts, function() { console.log( 'mq: consumer f queue […]

RabbitMQ – 如何检测消费者队列已被破坏?

所有我正在开发的应用程序中,客户端正在与rabbitmq服务器创build队列,还有另一个服务器,将pipe理所有的计算服务器。 我面临着在服务器端检测队列销毁的问题。 例如:从android客户端创build名称为“a”的队列,现在用户将要杀死该应用程序,该时间队列将被销毁。 但服务器仍处于该队列的未知状态。 所以我想要听任何事件或任何方法来调用侦测队列已从客户端摧毁。 谢谢

如何构build一个消息总线与Node.js和API分布在几个听众?

这是我想要发生的事情: 我的用户会打到一个端点,比如/api/findFile/app.js 。 express正在监听这个调用(标准的RESTtypes的东西),并会联系几个工作人员(可以是任意数量)要求他们执行工作,具体查找文件。 当第一个这样做的时候,它应该回应express的function,以便将结果发回给用户。 我想像某种消息总线/ AMQP设置将需要。 我认为快递function可以向工作人员publish请求,每个人都subscribe这个事件: bus.publish('findFile', {fileName: 'app.js'}}; 沿着这些线的东西。 工人有: bus.subscribe('findFile', function(event) {…. 每个工人将检查它是否有硬盘上的文件。 该文件可以在MULTIPLE工作盘上。 所以当第一个find它的时候,我想以某种方式中止别人回来expression。 为了回到expression,我想我们会做一个反向的pub/sub订阅,这次是明确地听取回应? 任何想法如何正确地devise这个? 特别是与比赛条件。

HTTP请求期间的RabbitMQ事件上的Express.js – res.send()?

我在我的网站上进行用户注册。 exports.regitser = (req, res)-> user = unique_id : "RANDOM_HASH" name : escape(req.body.name) pass : escape(req.body.pass) … # registrations starts here 在这一刻我需要推送数据到RabbitMQ交换,并等待在单独的队列"reg_results"响应。 当我在unique_id="RANDOM_HASH" "reg_results ”中收到消息后,似乎这个用户(对于这个HTTP请求)的注册成功完成,现在我可以给客户端res.send("You are registered!") 在继续来自客户端的HTTP请求的情况下处理这种模式的最好方法是什么? 提前致谢。