Tag: rabbitmq

如何在nodejs上只消耗一个来自rabbit mq的消息

我使用amqp.node库来将rabbitmq集成到我的系统中。 但在消费者,我想只处理一个消息,然后确认消息,然后消耗队列中的下一条消息。 目前的代码是: // Consumer open.then(function(conn) { var ok = conn.createChannel(); ok = ok.then(function(ch) { ch.assertQueue(q); ch.consume(q, function(msg) { if (msg !== null) { othermodule.processMessage(msg, function(error, response){ console.log(msg.content.toString()); ch.ack(msg); }); } }); }); return ok; }).then(null, console.warn); ch.consume将一次处理通道中的所有消息,模块的function在这里调用,其他模块不会在同一时间线上执行。 我想等待其他模块函数完成之后才能使用队列中的下一条消息。

RabbitMQ在ACK之后顺序接收消息

我正在寻找获得以下模式,以“顺序”与RabbitMQ接收消息。 我使用Node.js框架作为消费者。 比方说队列中有3条消息,我需要这种模式: 接收消息#1 – >进程 – >发送ACK – >接收消息#2 – >进程 – >发送ACK接收消息#3 – >进程 – >发送ACK 但是发生了什么事是node.js消费者并行地接收了所有3条消息,并且RabbitMQ等待个别ACK返回以从队列中移除消息。 这不是顺序的。 我的队列是耐用的,需要ACK。 有什么我失踪? 请帮忙!

使用RabbitMQ节点MQTT.js问题

无法使用node.js mqtt客户端连接到我的RabbitMQ服务器(已启用MQTT适配器)。 这些之间是否存在兼容性问题? 我可以使用bluerhinos MQTT PHP库连接到队列,所以我知道队列名称和主机名等是正确的,并且正在正在检索消息 Node.js应用程序 var mqtt = require('mqtt'); var mqttClient = mqtt.connect('mqtt://rabbit:1883'); mqttClient.on('connect', function() { console.log("connected"); }); mqttClient.publish('queue', 'message'); PHP require("vendor/bluerhinos/phpmqtt/phpMQTT.php"); $mqtt = new phpMQTT("rabbit", 1883, "clientId"); if ($mqtt->connect()) { $mqtt->publish("queue","Hello World! at ".date("r"),1); $mqtt->close(); } MQTT.js默认生成一个随机的客户端ID,所以它与客户端ID没有关系。

如何在没有并发的情况下进行多轮循环RabbmitMQ消费者

我目前正在制定一个负责接收大量事件的NodeJS系统,而且这些事件的处理顺序非常关键。 同样重要的是,应用程序可以扩展并处理掉一个Rabbit消费者,因此我有多个消费者读取一个绑定到'noAck'设置为false的直接交换的队列,每个队列的预取计数为1。 这确保了我的消息正在被处理,但两个消费者都在同时处理事件,我希望的结果是: Consumer A Consumer B ———- ———– process event 1 … acknowledge process event 2 … acknowledge process event 3 … ..and so on. 我意识到这会降低节点的效率,但保证事件按顺序完全处理对我来说更为重要。 任何帮助将不胜感激。

RabbitMQ:是否有可能删除队列时,他们是空的?

理想情况下,我想在RabbitMQ变空时删除队列。 基本上,我想要一个队列包含积压的消息,然后当发生什么事情时,这些消息将被发送,直到队列为空。 一旦队列为空,我想删除这个。 这可能吗? 我正在使用节点。

重用callback/重用通道的参数

我想在不同的节点模块中重用一个RabbitMQ通道。 由于通道是asynchronous创build的,我不确定最好的方法是将这个通道对象“注入”到其他模块中。 如果可能的话,我想避免像DI容器这样的外部依赖。 下面,你会发现我的简化代码。 提前感谢您的任何build议。 web.js require('./rabbitmq')(function (err, conn) { … // Start web server var http = require('./http'); var serverInstance = http.listen(process.env.PORT || 8000, function () { var host = serverInstance.address().address; var port = serverInstance.address().port; }); }); rabbitmq.js : module.exports = function (done) { … amqp.connect(rabbitMQUri, function (err, conn) { … conn.createChannel(function(err, ch) { […]

微服务和离子

您可以使用MEAN堆栈中的离子通过AMQPS通信使用微型服务来构build移动应用程序吗? 我主要关心的是,如果使用Bluemix构build微服务,并且每个实例都是独立的,那么我将如何将此体系结构迁移到移动应用程序。 提前致谢。

RabbitMQ通过websocket Stomp:无法检索排队的消息

我正在使用RabbitMQ Stomp的耐用订阅(文档在这里 )。 根据文档,当客户重新连接(订阅)相同的ID,他应该得到所有排队的消息。 但是,即使消息在服务器端排队,我也无法取回任何东西。 以下是我正在使用的代码: RabbitMQ版本:3.6.0 客户代码: var sock; var stomp; var messageCount = 0; var stompConnect = function() { sock = new SockJS(options.url); stomp = Stomp.over(sock); stomp.connect({}, function(frame) { debug('Connected: ', frame); console.log(frame); var id = stomp.subscribe('<url>' + options.source + "." + options.type + "." + options.id, function(d) { console.log(messageCount); messageCount = messageCount […]

我应该如何结合docker集装箱?

我有一个networking应用程序,我正在build设由3个不同的部分组成 Node.js API 前端Web客户端,消耗API Node.js服务进行数据处理 我需要2个node.js服务进行通信,所以我使用rabbitMQ。 我希望一切都被docker化,因为它使登机和部署变得容易。 但是,我不知道如何构造文件? 所有3个项目应该在单独的github仓库中,以便您可以单独开发它们,并为整个组织进行开发。 一个巨大的回购将是一场噩梦。 但是如何在运行时将它们结合起来呢? 他们各自应该在自己的容器? 我怎么把他们拉到一起? 他们应该都在一个巨大的文件夹? 应用 节点1 dockerfile 节点2 dockerfile 泊坞窗,compose.yml

聊天/系统通讯应用程序(Nodejs + RabbitMQ)

所以我现在有一个运行NodeJS的聊天系统,通过兔子传递消息,每个连接的用户有自己的唯一队列订阅,只有听消息(只有他们)。 后端也可以使用这个聊天pipe道来传递其他系统消息,如通知/好友请求和其他用户事件驱动的信息。 目前,即使消息的有效载荷相同,比如说1000个用户,后端也必须循环发布每个消息1个用户。 我想摆脱这一点,并能够发送相同的消息给多个不同的用户,但不是每个连接的用户。 (例如:通知某些用户他们的朋友已经联机)。 我考虑实现一个兔子队列系统,在这个系统中,所有的消息被汇集到同一个队列中,而不是兔子发送所有的用户队列,节点接收这些消息,并通过套接字连接(向谁在线)发送消息给适当的用户。 build议 – 基础设施 这样后端不需要为100和1000的用户循环,并且可以发送包含这个消息应该去往的所有用户的单个有效载荷。 我打算将nodejs服务器集中在一起。 我也想知道,因为从来没有做过这样的生产环境,我需要跟踪每个socketID。 到目前为止,我已经发现了潜在的缺陷: 由于1000条消息可以堆积在一个队列中,因此速度较慢。 手动存储套接字ID以手动传送给用户。 将路由卸载到NodeJS而不是RabbitMQ 有没有人做过这样的事情? 如果是这样,你有什么build议。 使用用户唯一队列进行扩展还是比较好?或者将所有用户的所有分组消息汇集到较小(但较大的队列)的队列中。