我有快速服务器设置来监听帖子请求并将帖子请求放入消息队列
var express = require('express');
var app = express();
app.use(express.bodyParser());
app.post('/test-page', function(req, res) {
var amqp = require('amqp');
var connection = amqp.createConnection({url: "amqp://guest:guest@localhost:5672"},{defaultExchangeName: ''});
connection.on('ready',function(){
console.log('connected');
var messageToSend = req.body;
var queueToSendTo = "xyz";
connection.queue(queueToSendTo,{'passive': true},function(){
connection.publish(queueToSendTo, messageToSend);
res.send(200);
connection.end();
});
});
});
app.setMaxListeners(0);
app.listen(80);
上面的代码假设收集post请求并放入队列,如果我发送10个请求,队列中将有超过300条消息。我不明白这种行为,或者我对将'发布'调用放入'准备'功能的理解是错误的,因为上面代码中的'连接'日志消息打印超过10个请求。
是否由于'connection.end'未关闭连接而发生?
我希望将每个帖子请求转换为RabbitMQ中的消息, 请告知是否有更好的方法。
(我在ubuntu 12.04上使用了带有rabbit-server-3.1.4-1的node-amqp的最新版本)
答案 0 :(得分:0)
问题在于您为每个测试页面的发布请求创建了与队列的连接。因此,您必须在帖子处理程序之外创建此连接。
我没有测试过代码,但这应该可以解决问题:
var express = require('express');
var app = express();
app.use(express.bodyParser());
var amqp = require('amqp');
var connection = amqp.createConnection({url: "amqp://guest:guest@localhost:5672"},{defaultExchangeName: ''});
connection.on('ready', function() {
console.log('connected');
});
app.post('/test-page', function(req, res) {
var messageToSend = req.body;
var queueToSendTo = "xyz";
connection.publish(queueToSendTo, messageToSend);
res.send(200);
});
app.setMaxListeners(0);
app.listen(80);