RabbitMQ的ConfirmChannel发布方法

问题描述 投票:0回答:1

我正在用 JS 中的“Hello World”代码测试 RabbitMQ

publisher.js

var amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost:5672', function(error0, connection) {
  if (error0) {
    throw error0;
  }
  connection.createConfirmChannel(function(error1, channel) {
    if (error1) {
      throw error1;
    }
    var msg = 'Hello world';
    channel.assertExchange('exchange2', 'fanout', {
        durable: false
      });
    channel.publish('exchange2','', Buffer.from(msg), {},publishCallback);
    channel.waitForConfirms(function(err) {if (err) console.log(err); else console.log('success');})
    console.log(" [x] Sent %s", msg);
  });
});

function publishCallback(err, ok) {
    if (err !== null) {
      // Handle the error if there was a problem with publishing
      console.error('Error:', err);
    } else {
      // The message was successfully published
      console.log('Message published successfully:', ok);
    }
  }

接收.js

var amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost:5672', function(error0, connection) {
  if (error0) {
    throw error0;
  }
  connection.createChannel(function(error1, channel) {
    if (error1) {
      throw error1;
    }
    var queue = 'hello';

    channel.assertExchange('exchange2', 'fanout', {
        durable: false
      });
  
      channel.assertQueue('', {
        exclusive: true
      }, function(error2, q) {
        if (error2) {
          throw error2;
        }
        console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q.queue);
        channel.bindQueue(q.queue, 'exchange2', '');
  
        channel.consume(q.queue, function(msg) {
          if(msg.content) {
              console.log(" [x] %s", msg.content.toString());
            //   channel.nack(msg, false, false)
            }
        }, {
          noAck: false
        });
      });
    });
});

我想要的是让发布者确认消息的确认。但我的问题是“channel.waitForConfirms”总是打印“成功”,即使队列中仍然有未确认的消息。

有人知道发生了什么事吗?

我尝试在发布方法中使用回调,但无论消息是否被确认,“err”参数为 null 并且“ok”参数未定义。

rabbitmq confirm publisher
1个回答
0
投票

发布者确认:客户端发布的消息由代理异步确认,这意味着它们已在服务器端得到处理。

未确认消息:消费者未能确认消息

发布者确认是关于发布者-服务器(rabbitMQ)的。关于服务器 - 消费者的未确认

因此,在这种情况下,服务器确认消息已存储在队列中(成功),但尚未被消费者确认

© www.soinside.com 2019 - 2024. All rights reserved.