Nodejs 第七十五章(MQ)

什么是RabbitMQ?

  • RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统。
  • 支持主流的操作系统,Linux、Windows、MacOX等
  • 多种开发语言支持,Java、Python、Ruby、.NET、PHP、C/C++、javaScript等

RabbitMQ核心概念

  1. 消息:在RabbitMQ中,消息是传递的基本单元。它由消息体和可选的属性组成
  2. 生产者Producer:生产者是消息的发送方,它将消息发送到RabbitMQ的交换器(Exchange)中
  3. 交换器Exchange:交换器接收从生产者发送的消息,并根据特定的规则将消息路由到一个或多个队列中
  4. 队列Queue:队列是消息的接收方,它存储了待处理的消息。消费者可以从队列中获取消息并进行处理
  5. 消费者Consumer:消费者是消息的接收方,它从队列中获取消息并进行处理


RabbitMQ 的安装

1. Rabbit MQ的依赖环境erlang

因为MQ是基于这个语言开发的

官网下载erlang:www.erlang.org/downloads

安装完成之后 新增一个环境变量

ERLANG_HOME -> 对应的目录例如(D:\erlang\Erlang OTP)

然后path 新增 %ERLANG_HOME%\bin

保存 打开cdm 输入 erl 没有报错即可成功

2. 安装MQ

打开MQ官网

例如windows

安装完成之后配置环境变量

启动MQ

安装MQ插件拥有可视化面板

bash 复制代码
rabbitmq-plugins enable rabbitmq_management

启动MQ命令

MQ默认端口5672

bash 复制代码
rabbitmq-server.bat start

访问 http://localhost:15672/#/ 账号密码都是 guest

Nodejs使用

我们在Nodejs使用MQ 无非就是微服务应用,或者就是跨语言通讯

安装依赖

sh 复制代码
npm install amqplib

producer.js 生产者

js 复制代码
import express from 'express'
import amqplib from "amqplib";

const app = express()
//连接MQ
const connection = await amqplib.connect("amqp://localhost")
//创建一个通道
const channel = await connection.createChannel()
const queueName = "task_queue"
app.get('/send', (req, res) => {
    const message = req.query.message
    //发送消息
    channel.sendToQueue(queueName, Buffer.from(message))
    res.send('send message success')
})


app.listen(3000,()=>{
    console.log('producer listen 3000')
})

consume.js 消费者

js 复制代码
import amqplib from "amqplib";
const queueName = "task_queue"
//连接
const connection = await amqplib.connect("amqp://localhost")
const channel = await connection.createChannel()

//连接队列
await channel.assertQueue(queueName, {
  durable: true //持久连接
})
//消息者监听器
channel.consume(queueName, (msg) => {
  console.log(`[x] Received ${msg.content.toString()}`)
  channel.ack(msg) //确认消费该消息
})

甚至还可以跨语言通讯 python

py 复制代码
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))

channel = connection.channel()

queueName = 'task_queue'

channel.queue_declare(queue=queueName,durable=True)

message = '小满zs'

channel.basic_publish(exchange='',routing_key=queueName,body=message)

connection.close()

效果展示

相关推荐
Le_ee19 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php
爱上好庆祝19 小时前
学习js的第七天(wed APIs的开始)
前端·javascript·css·学习·html·css3
KaMeidebaby20 小时前
卡梅德生物技术快报|冻干工艺开发:注射用心肌肽全流程参数优化与工程化方案
前端·其他·百度·新浪微博
Moment21 小时前
面试官:如果产品经理给你多个需求,怎么让AI去完成❓❓❓
前端·后端·面试
每天吃饭的羊21 小时前
JSONP
前端
gogoing21 小时前
ESLint 配置字段说明
前端·javascript
gogoing21 小时前
CSS 属性值计算过程(Computed Value)
前端·css
gogoing21 小时前
webpack 的性能优化
前端·javascript
gogoing21 小时前
Node.js 模块查找策略(require 完整流程)
javascript·node.js
桃花键神21 小时前
Bright Data Web Scraping指南 2026: 使用 MCP + Dify 自动采集海外社交媒体数据
大数据·前端·人工智能