Tag: rabbitmq

发布/订阅可靠消息:Redis VS RabbitMQ

背景 我正在制作一个发布/订阅典型应用程序,发布者向消费者发送消息。 发布者和消费者在不同的机器上,它们之间的连接偶尔会中断。 目的 这里的目标是确保无论连接发生什么事情,或者机器本身,发布者发送的消息总是被消费者接收。 消息的sorting不是必须的。 问题 根据我的研究,RabbitMQ是这种情况下的正确select: Redis将RabbitMQ作为Logstash和elasticsearch之间的数据代理/消息传递系统 然而,尽pipeRabbitMQ有一个关于发布和订阅的教程,但本教程不会将我们介绍给持久队列,也不会提到确认我认为是确保消息传递的关键。 另一方面,Redis也能做到这一点: http://abhinavsingh.com/customizing-redis-pubsub-for-message-persistence-part-2/ 但我找不到任何正式的教程或示例,而我目前的轻描淡写导致我相信,持久的队列和消息确认必须由我们来完成,因为Redis主要是内存数据存储而不是像RabbitMQ这样的消息代理。 问题 对于这个用例,哪个解决scheme最容易实现? (Redis解决scheme还是RabbitMQ解决scheme?) 请提供一个与您认为最好的例子的链接!

单独的Web和工作进程,是否应为每个进程build立一个新的连接?

我目前正在尝试构build一个具有Web和工作进程的NodeJS Web应用程序,并使用AMQP在它们之间进行通信。 使用我当前的设置,启动应用程序包括启动Web进程的脚本( server.js )和工作进程的另一个脚本( worker.js )。 每个文件都include第三个文件, amqp.js ,它使用一个启动函数,包括创build一个连接,然后创build一个通道,然后声明队列。 然而,在试图debugging另外一个问题时,我碰到了这篇文章 ,它显示了一个不同的结构:首先创build一个连接,然后启动两个进程,每个进程创build一个通往该连接的通道并断言两个队列。 我应该为每个工作人员build立一个新的连接吗?我可以在networking和工作人员分开的环境中实现这个连接吗?

如何通过rabbitmq发送图片和附加数据?

现在,我可以通过rabbitmq发送一个图片,但不知道如何做一些额外的数据,例如一个数字。 我的猜测是,将图片转换成base64string,并附加数字(用独特的符号分隔),然后发送到rabbitmq。 但是有可能吗?

AMQP警告:检测到可能的EventEmitter内存泄漏。 添加了11位听众。

我收到Node.js中的以下错误,我相信它与AMQP有关。 (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace at Connection.EventEmitter.addListener (events.js:160:15) at Connection.EventEmitter.once (events.js:179:8) at Connection.connect (/var/www/project/app/node_modules/amqp/amqp.js:1084:8) at Connection.reconnect (/var/www/project/app/node_modules/amqp/amqp.js:1049:8) at null._onTimeout (/var/www/project/app/node_modules/amqp/amqp.js:886:16) at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 任何人都可以指出问题可能是什么? 下面是我用来连接模块的代码: JackRabbit.prototype.subscribe = function subscribe(recievedCB, routingKey) { var self = this; var route = routingKey || '#'; […]

node-celery和node-amqp for RabbitMQ

我最近一直在阅读任务队列和消息队列,对于一切如何组合,我有点困惑。 我看到node-celery和node-amqp都提供了添加到RabbitMQ队列的方法。 然而,节点芹菜被描述为“任务队列”,而node-amqp被描述为“RabbitMQ的客户端”。 有什么不同? 或者node-amqp提供的function与Celery相似吗? 另外,RabbitMQ是否已经有一个队列? 为什么我需要在RabbitMQ之上的芹菜?

使用rabbitmq与multithreading之间的差异

如果我错了,请纠正我,但是,我正在Ruby中开发一段时间,其中最明显的缺点之一是缺lessmultithreading。 最近我一直在探索节点js,特别是它的非阻塞IO“function”。 我的问题是: 为什么要使用单线程语言并使用rabbitmq来asynchronous实现,如果只能使用像js这样的multithreading语言,那么可以同时触发1000个请求并同时完成它们? 节点js是否有其他multithreading语言的创新? 我想我真正要问的是:节点js非阻塞IO和multithreading之间有区别吗?

amqp交换不会自动删除

我有基于amqplib 0.2.1的rabbitmq 3.3.5运行和nodejs项目 问题是,一旦交换被声明,它不会被删除连接到rabbitmq后closures。 如果我们开始这样的例子 var amqp = require('amqplib'); var when = require('when'); amqp.connect('amqp://localhost').then(function(conn) { return when(conn.createChannel().then(function(ch) { var ex = 'logs_new'; var ok = ch.assertExchange(ex, 'fanout', {durable: false, autoDelete: true}}) var message = process.argv.slice(2).join(' ') || 'info: Hello World!'; return ok.then(function() { ch.publish(ex, '', new Buffer(message)); console.log(" [x] Sent '%s'", message); return ch.close(); }); […]

RabbitMQ“访问虚拟主机”OWN“拒绝”

正如你所看到的,我尝试在RabbitMQ上设置和使用新的虚拟主机的权限。 我找不到,我的问题是什么。 如果我使用虚拟主机作为“/”,一切工作正常。 =INFO REPORT==== 18-Nov-2016::11:50:20 === Setting permissions for 'mqadmin' in '/' to '.*', '.*', '.*' =INFO REPORT==== 18-Nov-2016::11:50:24 === Setting permissions for 'mqadmin' in '/OWN' to '.*', '.*', '.*' =INFO REPORT==== 18-Nov-2016::11:51:49 === accepting AMQP connection <0.18046.18> (my_ip:60527 -> server_ip:5671) =ERROR REPORT==== 18-Nov-2016::11:51:49 === Error on AMQP connection <0.18046.18> (my_ip:60527 -> server_ip:5671, user: […]

RabbitMQ&NodeJS:继“每个应用1个连接,每个线程1个通道,每个通道1个用户”指南

我正在使用NodeJS和amqplib来构build一个简单的作业队列库(有点类似于Jackrabbit) ,用于一个服务,该服务应该parsing包含许多不同事件信息的大型提要。 信息parsing后,它被分配到数以千计的队列(队列是消息顺序必须遵守的最小单位),然后由我的排队库消耗。 问题是:在这种情况下,如何遵循'每个应用1个连接,每个线程1个通道,每个通道1个用户'的指导方针? 这会造成数以千计的进程产生,浪费大量的内存和资源。 注意:每个队列中的消息数量不是很多,最多只有1-2 msg / sec

amqplib – 即使调用channel.ack(msg)

我正在编写一个模块,充当amqplib的包装。 动机是,我们有一个现有的和明确的交换/队列/绑定设置,我只是想公开的消费方法,以允许消费传入的数据。 为此,我的模块需要一个forms为callback(channel, msg)的callback参数。 在模块中,build立交换和队列和绑定之后,我有以下几点 module.exports = function (options, callback) { /* connection, exchange and queue set up here */ // consume messages from primary queue ok = ok.then(function() { var q = opts.pq; console.log('Subscribing to', q); return ch.consume(q, function (message) { callback(ch, message); }); }); return ok; }; 在callback中,我正在处理消息,并在成功时调用channel.ack(msg) 。 一切正常运行,因为没有错误,但RabbitMQpipe理控制台显示所有处理的消息为Unacked。 如果我杀了我的应用程序,那么Unacked消息就会回到队列中(谢天谢地)。 为什么我的信息不被查看? 我在做错了吗? […]