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()

效果展示

相关推荐
GISer_Jing6 分钟前
前端视频技术全解析:从编解码到渲染优化
前端·音视频·状态模式
LIO11 分钟前
Vue3 + Pinia 完整使用教程(企业级)
前端·vue.js
军军君0113 分钟前
数字孪生监控大屏实战模板:智慧城市大屏
前端·vue.js·typescript·前端框架·echarts·智慧城市·大屏展示
CDN36031 分钟前
高防切换后网站打不开?DNS 解析与回源路径故障排查
前端·网络·数据库
信也科技布道师41 分钟前
把7个页面变成1段对话:AI如何重构借款流程
前端·人工智能·重构·架构·交互·用户体验
27669582921 小时前
携程旅行 token1005
java·linux·前端·javascript·携程旅行·token1005·携程酒店
freewlt1 小时前
Cursor与AI编程工具崛起:前端工程师的能力模型重构与职业生存策略
前端·重构·ai编程
墨雪遗痕1 小时前
工程架构认知(三):从传统Web系统到AI大模型驱动系统
前端·人工智能·架构
C澒1 小时前
AI 生码 - PRD2CODE:Schema2PRD 全流程设计与实现
前端·ai编程
掘金者阿豪1 小时前
微信图片已过期或已被清理,真的找不回了吗?完整自救指南
前端·后端