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

效果展示

相关推荐
大圣编程14 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang14 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆14 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜15 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
负责的蛋挞16 小时前
异步HttpModule的实现方式
java·服务器·前端
丹宇码农19 小时前
把 HLS 字幕玩出花:zwPlayer 如何让 M3U8 视频支持全文搜索、翻译与码率自适应
前端·javascript·音视频·hls·视频播放器
2501_9437823519 小时前
【共创季稿事节】猜数字游戏:二分法思维与交互式反馈
前端·游戏·microsoft·harmonyos·鸿蒙·鸿蒙系统
GV191rLvq19 小时前
基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
服务器·前端·asp.net
吠品19 小时前
LangChain 里 tool_call_id 为空?一次 MCP 工具集成的排查记录
前端