MQ客户端服务器端简单的demo
var amqp = require('amqplib');
//首先我们需要通过amqp连接本地的rabbitmq服务,返回一个promise对象
amqp.connect('amqp://127.0.0.1').then(function(conn){
//进程检测到终端输入CTRL+C退出新号时,关闭RabbitMQ队列。
process.once('SIGN',function(){
conn.close();
});
//连接成功后创建通道
return conn.createChannel().then(function(ch){
//通道创建成功后我们通过通道对象的assertQueue方法来监听hello队列,并设置durable持久化为false。这里消息将会被保存在内存中。该方法会返回一个promise对象。
var ok = ch.assertQueue('hello',{durable:false}).then(function(_qok){
//监听创建成功后,我们使用ch.consume创建一个消费者。指定消费hello队列和处理函数,在这里我们简单打印一句话。设置noAck为true表示不对消费结果做出回应。
//ch.consume会返回一个promise,这里我们把这个promise赋给ok。
return ch.consume('hello',function(msg){
console.log("[x] Received '%s'",msg.content.toString());
},{noAck:true});
});
//消费者监听完成之后,打印一行成功信息
return ok.then(function(_consumeOk){
console.log('[*] Waiting for message. To exit press CRTL+C');
});
});
}).then(null,console.warn);//如果报错打印报错信息
var amqp = require('amqplib');
var when = require('when');
//连接本地消息队列服务
amqp.connect('amqp://localhost').then(function(conn){
//创建通道,让when立即执行promise
return when(conn.createChannel().then(function(ch){
var q = 'hello';
var msg = 'Hello World';
//监听q队列,设置持久化为false。
return ch.assertQueue(q,{durable: false}).then(function(_qok){
//监听成功后向队列发送消息,这里我们就简单发送一个字符串。发送完毕后关闭通道。
ch.sendToQueue(q,new Buffer(msg));
console.log(" [x] Sent '%s'",msg);
return ch.close()
});
})).ensure(function(){ //ensure是promise.finally的别名,不管promise的状态如何都会执行的函数
//这里我们把连接关闭
conn.close();
});
}).then(null,console.warn);
网友评论