我用express建立了一个小的nodejs项目。在根目录中创建了一个名为“ connectors”的文件夹,其中有两个文件:pulisher.js和consumer.js。在index.js的路由文件夹中,我调用了一个发布msg并调用使用者使用它的终结点。这是发布者和消费者以及索引的代码
Publisher.js
var config = require('../config');
var open = require('amqplib').connect('amqp://'+ config.rabbitmq.url);
var queue = 'hello'
var msg = 'hello world!'
module.exports = open.then(function(conn) {
return conn.createChannel();
}).then(function(ch) {
return ch.assertQueue(queue,{durable:false})
.then(function(ok) {
const r = ch.sendToQueue(queue, Buffer.from(msg));
console.log(" [x] Sent %s", msg);
return r
});
}).catch(console.warn);
Consumer.js
var config = require('../config');
var open = require('amqplib').connect('amqp://'+ config.rabbitmq.url);
var queue = 'hello'
module.exports = open.then(function(conn) {
return conn.createChannel();
}).then(function(ch) {
return ch.assertQueue(queue, {durable: false})
.then(function(ok) {
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue);
return ch.consume(queue, function(msg) {
console.log(" [x] Received %s", msg.content.toString());
ch.ack(msg)
}, {
noAck: false
});
});
}).catch(console.warn);
index.js
var express = require('express');
var router = express.Router();
var publisher = require('../connectors/publisher');
var consumer = require('../connectors/consumer');
async function pub(){
publisher
.then(res=>{
console.log('-----------------------')
console.log('publishing now',res)
}).then(()=>{
consumer.
then(res=>{
console.log('consuming',res)
})
})
}
/* GET home page. */
router.get('/', async(req, res, next) => {
const result_pub = await pub()
res.send('ok')
});
module.exports = router;
我使用邮差呼叫“ /”端点,我希望看到console.log(“ [x]收到%s”,msg.content.toString())触发的味精。 但是它没有显示出来,就像没有消耗味精, 当我呼叫端点时,它甚至都没有console.log“已发送问候世界” 这是我得到的输出:
现在发布为true 消费{ConsumerTag:'amq.ctag-BsHsykyMrPKvT1nAjmGmBg'}
感谢您的帮助!