2015-01-16 3 views
0

Я использую модуль AMQP для подключения к RabbitMQ. Я могу подключиться, создать обмен, очередь и отправить/опубликовать сообщение на обмен. Я могу подтвердить, что сообщения публикуются на консоли управления.node.js AMQP не возвращает обратный вызов

Проблема в том, что я не получаю обратный вызов для обмена публичным звонком. Это мой код.

Initialization (приложение является экземпляром 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"); 
          } 
        }); 

Callback функцию (transmissionFailed) никогда не вызывается. Пожалуйста помоги!

+0

IIRC, node-amqp будет вызывать этот обратный вызов только в том случае, если вы включите публикацию acks в обмене. – SLaks

+0

@SLaks Я установил {confirm: true} вариант для обмена. Пожалуйста, дайте мне знать, если это неверно. – user3658423

ответ

0

Док недостаточно ясен. Как мы используем его,

при вызове: connection.exchange (имя, параметры = {}, 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"); 
         } 
       }); 
0

обратного вызова функция, которая будет вызвана, если обмен находится в режиме подтверждающим значение отправлено будет верно или ложным, это является признаком ошибки, так что это означает, что ошибка произошла и ложна, означает, что публикация прошла успешно

поэтому мы должны установить обмен в качестве режима подтверждения при создании обмена