Node.js Rabbitmq直接排气管,耐用
我有一个nodejs应用程序,它连接到rabbitmq服务器,向移动应用程序发送通知。 我创建了一个带有dustable:true属性的直接交换和一个带有persistent:true属性的发布消息,但消息并没有被存储。例如,如果我发布了具有routeKey“hello”的消息,并且在发布该消息时,不存在任何绑定为“hello”的队列,则exchange会忽略此消息。我想存储此消息,并在“hello”绑定建立时发送到队列。我怎样才能达到这个目标? 下面是我的代码。任何帮助,我都感激Node.js Rabbitmq直接排气管,耐用,node.js,rabbitmq,node-amqplib,Node.js,Rabbitmq,Node Amqplib,我有一个nodejs应用程序,它连接到rabbitmq服务器,向移动应用程序发送通知。 我创建了一个带有dustable:true属性的直接交换和一个带有persistent:true属性的发布消息,但消息并没有被存储。例如,如果我发布了具有routeKey“hello”的消息,并且在发布该消息时,不存在任何绑定为“hello”的队列,则exchange会忽略此消息。我想存储此消息,并在“hello”绑定建立时发送到队列。我怎样才能达到这个目标? 下面是我的代码。任何帮助,我都感激 const
const { clients } = require("./ws");
const { env } = require("../config/env");
const amqp = require("amqplib/callback_api");
const rabbitmq = {};
const exchange = "NOTIFICATION3";
amqp.connect(env.rabbitmqUrl, (err, conn) => {
if (err) {
console.log(`amqp.connect Error ${err}`);
return;
}
conn.createChannel((err, ch) => {
if (err) {
console.log(`conn.createChannel Error ${err}`);
return;
}
ch.assertExchange(exchange, "direct", { durable: true });
ch.assertQueue("", { exclusive: true }, (err, q) => {
if (err) {
console.log(`ch.assertQueue Error ${err}`);
return;
}
ch.prefetch(1);
ch.consume(
q.queue,
(msg) => {
console.log(
` [x] ${msg.fields.routingKey}: ${msg.content.toString()}`
);
ch.ack(msg);
},
{ noAck: false }
);
rabbitmq.bind = ((ch, q, exchange) => (userId) => {
ch.bindQueue(q.queue, exchange, userId);
})(ch, q, exchange);
rabbitmq.unbind = ((ch, q, exchange) => (userId) => {
ch.unbindQueue(q.queue, exchange, userId);
})(ch, q, exchange);
rabbitmq.bind("1");
rabbitmq.bind("2");
setTimeout(() => {
rabbitmq.bind("3");
}, 2000);
});
rabbitmq.publish = ((ch, exchange) => (userId, msg) => {
ch.publish(exchange, userId, Buffer.from(msg), {
persistent: true,
});
console.log(` [x] Sent ${msg} to ${exchange}: ${userId}`);
})(ch, exchange);
setTimeout(() => {
rabbitmq.publish("1", "tarik carli");
rabbitmq.publish("2", "tarik carli");
rabbitmq.publish("3", "tarik carli");
}, 1000);
});
});
module.exports = rabbitmq;
下面是我的console.log结果
Server is listening port 4000.
[x] Sent tarik carli to NOTIFICATION3: 1
[x] Sent tarik carli to NOTIFICATION3: 2
[x] Sent tarik carli to NOTIFICATION3: 3
[x] 1: tarik carli
[x] 2: tarik carli
服务器正在侦听端口4000。
[x] 送塔里克·卡利去通知3:1
[x] 送塔里克·卡利去通知3:2
[x] 送塔里克·卡利去通知3:3
[x] 1:塔里克·卡利
[x] 2:塔里克·卡利