【问题标题】:node.js AMQP not returning callbacknode.js AMQP 不返回回调
【发布时间】:2015-01-16 03:45:33
【问题描述】:

我正在使用节点AMQP 模块连接到RabbitMQ。我能够连接、创建交换、队列并能够将消息发送/发布到交换。我可以确认消息已在管理控制台上发布。

问题是我没有收到交换发布调用的回调。这是我的代码。

初始化:(app是express.js实例)

                app.rabbitMQConnection = amqp.createConnection({ host: 'myurl.com', login: 'login', password: 'pwd' });
                app.rabbitMQConnection.on('ready', function(){
                    console.log("RabbitMQ server connected");
                    app.rabbitMQConnection_e = app.rabbitMQConnection.exchange('my-exchange', { confirm: true, durable: true, autoDelete: false }, function (q) {
                        app.rabbitMQConnection_q_lisorders = app.rabbitMQConnection.queue('shoe-orders', {autoDelete: false, durable: true}, function (q) {
                            app.rabbitMQConnection_q_lisorders.bind(app.rabbitMQConnection_e, '#');
                        });
                    });
                });

然后当我需要发送消息时,我使用:

                    app.rabbitMQConnection_e.publish('routingKey', { message: myMessage }, {  deliveryMode: 2 }, function(transmissionFailed){
                            if (transmissionFailed == true){ 
                                        console.log("message failed");
                            }else{
                                        console.log("message sent");
                            }
                    });

永远不会调用回调函数(transmissionFailed)。请帮忙!

【问题讨论】:

  • IIRC,node-amqp 只会在您在交换中启用发布确认时调用该回调。
  • @SLaks 我已设置 {confirm: true} 选项进行交换。如果不正确请告诉我

标签: javascript node.js rabbitmq amqp node-amqp


【解决方案1】:

文档不够清晰。当我们使用它时,

调用时:connection.exchange(name, options={}, openCallback)

然后回调有交换对象,用于发布消息。

您的代码将是:

app.rabbitMQConnection.exchange('my-exchange', { confirm: true, durable: true, autoDelete: false }, function (q) {
    app.rabbitMQConnection_e = q;
    .....
});

然后:

app.rabbitMQConnection_e.publish('routingKey', { message: myMessage }, {  deliveryMode: 2 }, function(transmissionFailed){
                        if (transmissionFailed == true){ 
                                    console.log("message failed");
                        }else{
                                    console.log("message sent");
                        }
                });

【讨论】:

    【解决方案2】:

    callback 是一个函数,如果交换处于确认模式,将被调用,发送的值将是 true 或 false,这是错误的存在,所以 true 表示发生错误,false 表示发布成功

    所以我们应该在创建交易所时将交易所设置为确认模式

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 2018-08-15
      • 2021-08-17
      • 2017-01-27
      • 2020-07-11
      • 1970-01-01
      相关资源
      最近更新 更多