我想在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); });
这消息发得太快了吧。象机关枪一样都突突出去了。
给消息发布一个延迟,看看如何。
@leapon 用setInterval没有问题,可以正常发布。
@huyueMiss 是啊。这100000个循环跑完了,回调函数才有机会运行。即使消息回来了,也没捞到时间运行。
@leapon 也就是说程序一直都在跑循环,根本还没有时间去跑publish。等到循环跑完后服务器才空闲下来去publish?
用process.nextTick 或者 setImmediate 试试看, 不是没有返回, 是回调函数没机会执行, 因为你的for循环就是典型的CPU密集型…