Node.js中使用Rabbitmq
发布于 10 年前 作者 huyueMiss 6499 次浏览 最后一次编辑是 8 年前 来自 问答

我想在Node.js中使用Rabbitmq,用了node-amqp的客户端。

我在测试的时候发现一个问题,我用了for做了100000万次循环,循环里面就发布消息到Rabbit Server。

为啥总是循环执行完成后queue里面才会有消息,不是每次循环都发布的吗??

谢谢。。。

var amqp = require(‘amqp’);

var connection = amqp.createConnection();

connection.on(‘ready’, function () { for(var i=0;i<100000;i++) { console.log(i); var exchange=connection.exchange(‘test’,{type:‘fanout’,durable:true,autoDelete:false}); exchange.publish(’#’,i,function(a){ console.log(a); }) } });

connection.on(‘error’,function(s){ console.log(s); });

5 回复

这消息发得太快了吧。象机关枪一样都突突出去了。

给消息发布一个延迟,看看如何。

@leapon 用setInterval没有问题,可以正常发布。

@huyueMiss 是啊。这100000个循环跑完了,回调函数才有机会运行。即使消息回来了,也没捞到时间运行。

@leapon 也就是说程序一直都在跑循环,根本还没有时间去跑publish。等到循环跑完后服务器才空闲下来去publish?

用process.nextTick 或者 setImmediate 试试看, 不是没有返回, 是回调函数没机会执行, 因为你的for循环就是典型的CPU密集型…

回到顶部