What is a message queue? How to use message queue in node?
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 everyone!
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)
##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.
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.
Exchange )
Message queueWhen sending a messagemusthave 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
-
MAC can directly use the brew command to install
brew install rabbitmq
- Start the rabbitmq service after the installation is complete
Then visit http://localhost:15672/ locally to see the background of the rabbitmq service. The initial account and password are
amqplib is a set of tools for using message queues in node, which allows us to quickly use message queues
地址: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条消息的队列
创建消费者
/** 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()); }); })();
执行后可以看到,两个通道可以同时工作接收消息
更多node相关知识,请访问:nodejs 教程!
The above is the detailed content of What is a message queue? How to use message queue in node?. For more information, please follow other related articles on the PHP Chinese website!

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Zend Studio 13.0.1
Powerful PHP integrated development environment

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Dreamweaver CS6
Visual web development tools