nodejs 消息队列,消息队列 有哪些

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: