背景:本项目基于koa框架的node项目。mq包经过多方查资料,最终选择amqplib包,版本是0.10.2。如下图所示:
废话不多说,开始写代码:
一、创建rabbitMqConsume.js文件,内容如下:
let amqp = require("amqplib");
let moment = require('moment');
const { utils, errors, ret, nets } = require('rz-libs-utils');
//共享ctx
const shared_ctx=require("./shared-ctx");
async function mqConsume(){
const mqConfig = {
id : shared_ctx.getConfig('cgh.mq[0].id') || 'apiDependsProvide',
exchangeName : shared_ctx.getConfig('cgh.mq[0].exchange') || 'test.ex-apiDependsExchange',
queueName : shared_ctx.getConfig('cgh.mq[0].queue') || 'test.q-apiDependsProvide',
routingkey : shared_ctx.getConfig('cgh.mq[0].routingkey') || 'TEST.apiDepends'
}
let conOps = {
hostname: shared_ctx.getConfig('cgh.mq[0].address') || "XXX.XX.XX.XX",,
port: shared_ctx.getConfig('cgh.mq[0].port') || 5672,
username: shared_ctx.getConfig('cgh.mq[0].username') || 'test',
password : shared_ctx.getConfig('cgh.mq[0].password') || '123456'
}
// console.log("conOps:",conOps.hostname);
const conn = await amqp.connect(conOps);
const ch = await conn.createChannel();
const q = await ch.assertQueue(mqConfig.queueName,
{
durable: true,
exclusive: false,
autoDelete: false,
//增加单活认证
arguments: {
"x-dead-letter-exchange":"test.dlx-apiDependsProvide(dlx)"
},
deadLetterExchange: "test.dlx-apiDependsProvide(dlx)",
}
);
await ch.bindQueue(q.queue, mqConfig.exchangeName, mqConfig.routingkey);
ch.consume(q.queue, async msg => {
try {
let msgJSON = JSON.parse(msg.content.toString());
// console.log(msgJSON);
ch.ack(msg); //手动应答消息
} catch (error) {
console.log(error);
}
}, { noAck: false })//设置消息手动应答
}
module.exports.mqConsume = mqConsume;
二、上述编写消费者完成,下面开始编写启动时加载mq配置和注册消费者,关键代码如下:
const mq=require('./common/rabbitMqConsume')
...
setTimeout(function() {
console.log('server is starting...');
customInit(app);
}, 5000);
async function customInit(app) {
serviceEntry.init(app).then(function(){
const index = require('./routes/index')
// routes
app.use(index.routes(), index.allowedMethods())
mq.mqConsume();
console.log('server is started.');
})
}
至此完结撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。