Home  >  Article  >  Web Front-end  >  An article briefly analyzing how to use message queue in node

An article briefly analyzing how to use message queue in node

青灯夜游
青灯夜游forward
2023-01-17 19:48:312114browse

What is a message queue? The following article will take you through the basic concepts of message queues and introduce how to use message queues in node. I hope it will be helpful to you!

An article briefly analyzing how to use message queue in node

1. Message Queue

##What is Message Queue

The message queue is a container that saves messages during the message transmission process. It is essentially a queue (first in, first out)


An article briefly analyzing how to use message queue in node

##Message

refers to the data that needs to be transmitted, which can be some text, string, or object and other information.

Message Queue

is a communication service between two applications. The producer of the message can return immediately after storing the data in the message queue without waiting for the message. The receiver responds. That is: Producer ensures that data is inserted into the queue, and there is no need to worry about who will get this message. The receiver of the message only focuses on receiving the message and processing it. [Related tutorial recommendations: nodejs video tutorial, Programming teaching]

An article briefly analyzing how to use message queue in node

What can the message queue do?

  • Decoupling

    As introduced above, the message queue separates the message producer and the message receiver, and neither is affected by the other.

  • Asynchronous

    Asynchronous is to reduce the response time of requests. The producer of the message only needs to process simple logic and put the data in the message queue to return. , complex logic, such as: database operations, IO operations are handled by the receiver of the message.

  • Peak Shaving

    When the message queue application is serving, it can save the instantaneous influx of request information into the message queue and return it immediately. The request is then processed based on the data by the recipient of the message.

  • Application Scenarios

    Applications such as game activities, flash sale activities, orders, etc. will cause a sudden increase in traffic.

2. The concept of message queue

After introducing the basic information of message queue, let’s introduce some of the message queue before developing the message queue. Basic concept~

Producer and consumer of message

producer mentioned above

and Consumer provide

links, channels and queues

    Link (connection): Represents a link between the service program and the message queue.
  • A service program can create multiple links

    .

  • Channel: A channel between message queue links.
  • A link can have multiple channels

    .

  • Queue (queue): The queue that stores data in the message queue. A message queue service can have multiple queues.
  • To summarize, the relationship between links and channel queues is like this

An article briefly analyzing how to use message queue in node

Exchange )Message queue

When sending a message

musthave a switch. If not specified, the default switch is used. The role of the switch is to push messages to the corresponding queue. There are a total of 4 types of switches in the message queue

    Direct: Specify the queue mode. When a message comes, it will only be sent to the specified Queue, and other Queues will not receive it.
  • fanout: Broadcast mode, when a message comes, it will be sent to all queues.
  • topic: Fuzzy matching mode, corresponding forwarding through fuzzy matching.
  • header: Similar to Direct mode.
3.node uses rabbitMQ

##Install rabbitMQ

Installing rabbitMQ can be downloaded and installed through the official website.

Portal

Then visit http://localhost:15672/ locally to see the background of the rabbitmq service. The initial account and password are An article briefly analyzing how to use message queue in nodeguest

An article briefly analyzing how to use message queue in node##node project installation amqplib

amqplib是node中使用消息队列的一套工具,可以让我们快速地使用消息队列

地址:https://www.npmjs.com/package/amqplib

创建生产者

/** product.js 消费者 */


const amqplib = require('amqplib');
const config = require('./config');

const { connectUrl } = config;

(async () => {
  const connection = await amqplib.connect(connectUrl);

  const channel = await connection.createChannel();
  const exchangeName = 'testExchange';
  const key = 'testQueue';
  const sendMsg = 'hello rabbitmq';
    
  // 知道交换机类型
  await channel.assertExchange(exchangeName, 'fanout', {
    durable: true,
  });
    
  // 指定一个队列
  await channel.assertQueue(key);

  for (let i = 0; i < 100; i++) {
    channel.publish(exchangeName, key, Buffer.from(`${sendMsg} ${i}`));
  }

  await channel.close();
  await connection.close();
})();

运行后在后台可以看到新增了一个有100条消息的队列

An article briefly analyzing how to use message queue in node

创建消费者

/** customer.js 消费者 */

const amqplib = require('amqplib');
const config = require('./config');

const { connectUrl } = config;

(async () => {
  let connection = await amqplib.connect(connectUrl);
  const exchangeName = 'testExchange';
  const key = 'testQueue';
  // 创建两个通道
  const channel1 = await connection.createChannel();
  const channel2 = await connection.createChannel();
  // 指定一个交换机
  await channel1.assertExchange(exchangeName, 'fanout', {
    durable: true,
  });
  // 指定一个队列
  await channel1.assertQueue(key);
  await channel1.bindQueue(key, exchangeName, key);
  channel1.consume(key, (msg) => {
    console.log('channel 1', msg.content.toString());
  });

  await channel2.assertExchange(exchangeName, 'fanout', {
    durable: true,
  });
  await channel2.assertQueue(key);
  await channel2.bindQueue(key, exchangeName, key);
  channel2.consume(key, (msg) => {
    console.log('channel 2', msg.content.toString());
  });
})();

执行后可以看到,两个通道可以同时工作接收消息

An article briefly analyzing how to use message queue in node

更多node相关知识,请访问:nodejs 教程

The above is the detailed content of An article briefly analyzing how to use message queue in node. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:juejin.cn. If there is any infringement, please contact admin@php.cn delete