CNode

Node.js中使用Rabbitmq

问答
HhuyueMiss发布于11 年前最后回复11 年前5 回复7054 浏览0 收藏

我想在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)

L
leapon#1·11 年前

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

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

L
leapon#3·11 年前
引用 huyueMiss@leapon 用setInterval没有问题,可以正常发布。

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

H
huyueMiss#4·11 年前
引用 leapon@huyueMiss 是啊。这100000个循环跑完了,回调函数才有机会运行。即使消息回来了,也没捞到时间运行。

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

X
xujun52011#5·11 年前

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

参与回复
登录后即可参与回复。登录