nodejs 消息队列,消息队列 有哪些
什么是消息队列?下面这篇文章带你了解消息队列的基本概念,并介绍如何在node中使用消息队列。希望对你有帮助!
node.js速度课程简介:进入学习
1.消息队列
什么是消息队列
消息是指要传输的数据,可以是一些文本、字符串或对象。
消息队列是两个应用程序之间的通信服务。消息生产者可以在将数据存储在消息队列中后立即返回数据,而无需等待消息接收者回复。也就是说,生产者保证数据被插入到队列中,谁得到消息并不重要。消息接收者只关注接收消息和处理消息。
消息队列能做什么
解耦如上所述,消息队列将消息的生产者和消息的接收者分开,两者互不影响。
异步异步是为了减少请求的响应时间。消息生产者只需要处理简单的逻辑,将数据放入消息队列中返回。复杂的逻辑,比如数据库操作,IO操作都由消息的接收者处理。
削峰消息队列在服务中使用时,可以将大量请求保存在消息队列中,并立即返回。然后消息的接收者根据数据处理请求。
应用场景游戏活动,秒杀活动,下单等。会造成瞬间的交通爆炸。
2.消息队列的概念
在介绍完消息队列的基本信息之后,在开发之前,先介绍一下消息队列的一些基本概念~
消息的生产者(producer)与消费者(customer)
上述生产者和消费者提供
链接,通道与队列
Connection:表示服务程序和消息队列之间的链接。一个服务程序可以创建多条链接。
通道:消息队列链接之间的链接,一个链接可以有多个通道。
队列:在消息队列中存储数据的队列。一个消息队列服务可以有多个队列。
总而言之,链接和通道队列之间的关系如下
交换机(exchange)
当消息队列发送消息是必须时,应该有一个开关。如果未指定,将使用默认开关。交换机的功能是将消息推送到相应的队列。消息队列中有4个交换机。
直接:指定队列模式。消息来了,只会发送到指定队列,其他队列不会收到。
扇出:广播模式,当消息到来时,它将被发送到所有队列。
题目:模糊匹配模式,由模糊匹配转发。
标题:类似于直接模式。
3.node使用rabbitMQ
安装rabbitMQ
rabbitMQ安装可以在官网下载安装,门户MAC可以直接用brew命令安装brew install rabbitmq。安装完成后,可以启动rabbitmq服务。
然后访问http://localhost:15672/locally,可以看到rabbitmq服务的后台。初始帐户密码是guest。
node项目安装amqplib
Amqplib是一套在node中使用消息队列的工具,可以让我们快速使用消息队列。
创建生产者
/** product.js消费者*/
const amqplib=require( amqplib );
const config=require(。/config );
const { connectUrl }=config
(async ()={
const connection=await amqplib . connect(connectUrl);
const channel=await connection . create channel();
const exchange name= test exchange ;
const key= testQueue
const sendMsg= hello rabbitmq
//知道开关类型
await channel . assert exchange(exchange name, fanout ,{
耐用:真的,
});
//指定一个队列
await channel . assert queue(key);
for(设I=0;i 100i ) {
channel.publish(exchangeName,key,buffer . from(` $ { send msg } $ { I } `));
}
await channel . close();
await connection . close();
})();在后台运行之后,您可以看到添加了一个包含100条消息的新队列。
创建消费者
/** customer.js消费者*/
const amqplib=require( amqplib );
const config=require(。/config );
const { connectUrl }=config
(async ()={
let connection=await amqplib . connect(connectUrl);
const exchange name= test exchange ;
const key= testQueue
//创建两个通道
const channel 1=await connection . create channel();
const channel 2=await connection . create channel();
//指定一个交换机
等待第一频道。断言交换(交换名称,“扇出”,{
耐用:真的,
});
//指定一个队列
等待第一频道。断言队列(键);
await channel1.bindQueue(key,exchangeName,key);
channel1.consume(key,(msg)={
console.log(channel 1 ,msg。内容。tostring());
});
等待第二频道。断言交换(交换名称,“扇出”,{
耐用:真的,
});
等待第二频道。断言队列(键);
await channel2.bindQueue(key,exchangeName,key);
channel2.consume(key,(msg)={
console.log(channel 2 ,msg。内容。tostring());
});
})();执行后可以看到,两个通道可以同时工作接收消息
更多结节相关知识,请访问:节点射流研究…教程!以上就是什么是消息队列?结节中如何使用消息队列?的详细内容,更多请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。