在RabbitMQ中,assertQueue和sendToQueue有何区别?

9
我已经找到了有关在RabbitMQ中发送字符串示例并从队列中接收的代码,但我对以下方法不是很清楚:assertQueuesendToQueuesend.js
var amqp = require('amqplib/callback_api');

amqp.connect('amqp://localhost', function(err, conn) {
  conn.createChannel(function(err, ch) {

              var q = 'hello';
                var msg = 'Hello World! - '+i;

                ch.assertQueue(q, {durable: false});                    
                ch.sendToQueue(q, new Buffer(msg));
                console.log(" [x] Sent %s", msg);
  });
  setTimeout(function() { conn.close(); process.exit(0) }, 1000);
});

receive.js

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

amqp.connect('amqp://localhost', function(err, conn) {          //amqp://localhost
  conn.createChannel(function(err, ch) {
    var q = 'hello';

    ch.assertQueue(q, {durable: false});
    console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
    ch.consume(q, function(msg) {
      console.log(" [x] Received %s", msg.content.toString());
    }, {noAck: true});
  });
});
2个回答

27

根据你的例子,assertQueue 会检查 "hello" 队列是否存在,如果不存在就会创建它。

sendToQueue 将消息放入 "hello" 队列。


1
谢谢。文档中没有说明如果队列不存在则会创建一个。很奇怪... - Abdallah

4

assertQueue 是一个队列声明的方法,sendToQueue 则是将你的消息推送到队列中的方法。

需要注意的是:声明队列是幂等的 - 只有当队列不存在时才会被创建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接