node mq 使用样例

 

一。使用amqplib

 官网文档:

http://www.squaremobius.net/amqp.node/channel_api.html

const amqp = require('amqplib');

二。发布订阅样例

 1. publish

async function main() {
    let amqp = require('amqplib');
    let conn = await amqp.connect('amqp://10.200.3.114'); // 创建连接
    let channel = await conn.createChannel(); // 创建channel
    await channel.assertExchange('logs', 'fanout', {durable: false});  // 绑定exchange,exchange名为logs, 'fanout'为广播类型,
    await channel.publish('logs', '', Buffer.from('test message'));  // 在绑定的exchange上发布消息,队列名不填exchange会自动分配一个
    await channel.close();
    await conn.close();
}

main()

2. consume消息

async function main() {
    async function logMessage(msg) {
        console.log(msg.fields); // fields中会给出{queue队列名,messageCount最近消息数,consumerCount最近消费者数}
        console.log(msg.content.toString()); // content为消息内容

    }
    let amqp = require('amqplib');
    let coon =  await amqp.connect('amqp://10.200.3.114'); // 创建连接
    let channel =  await coon.createChannel(); // 创建channel
    await channel.assertExchange('logs', 'fanout', {durable: false}); // 绑定exchange,'logs'为exchange名,'fanout'为广播类型,
    let queue_ok = await channel.assertQueue('', {exclusive: true});  // 确定队列
    await channel.bindQueue(queue_ok.queue, 'logs', ''); // 绑定队列,'logs'为exchange名
    await channel.consume(queue_ok.queue, logMessage, {noAck: true}) // 消费消息,logMessage为回调的消息处理函数

}
main()

三。部分参数说明

1.广播为实时,publish只负责发送,不管对方是否收到,因此广播模式下消息持久化无效。

2.三种广播模式:

   fanout:所有bind到该exchange的queue都会接收到消息

   direct:通过routingKey和exchange同时决定哪个queue会接收到消息

   topic:所有符合routingKey所bind的queue可以接收消息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值