【问题标题】:node-amqp + rabbitMQ how to convert post request into messagenode-amqp + rabbitMQ 如何将 post 请求转换为消息
【发布时间】:2013-10-23 08:29:23
【问题描述】:

我有快速服务器设置来监听发布请求并将发布请求放入消息队列

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多条消息。我不理解这种行为,或者我对将 'publish' 调用放入 'ready' 函数的理解是错误的,因为上面代码中的 'connected' 日志消息对于 10 个 post 请求打印超过 10 个。

是因为 'connection.end' 没有关闭连接吗?

我希望将每个发布请求转换为 RabbitMQ 中的消息, 如果有更好的方法,请指教。

(我在 ubuntu 12.04 上使用最新的 node-amqp master 和 rabbit-server-3.1.4-1)

【问题讨论】:

    标签: node.js rabbitmq node-amqp


    【解决方案1】:

    问题在于您正在为每个对测试页面的发布请求创建与队列的连接。所以你必须在 post 处理程序之外创建这个连接。

    我还没有测试过代码,但这应该可以解决问题:

    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);
    

    【讨论】:

    • 成功了。工作完美。谢谢。但是,由于默认的 'reconnect:true' 值,连接没有结束。对于那些坚持每次都创建新连接的人,有这行'connection.implOptions.reconnect = false;'将解决原来的问题。虽然最好的方法是公认的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 2021-01-08
    • 1970-01-01
    • 2017-04-05
    • 2021-11-06
    • 2013-12-30
    • 2018-07-24
    • 1970-01-01
    相关资源
    最近更新 更多