快速入门消息队列 RabbitMQ

前端监控系统概述

前端监控系统主要负责采集用户端的异常、性能、业务埋点等数据,并将这些数据上报到服务端进行存储与可视化分析。
随着用户量的增加,数据量也会相应增大,这会对服务端产生较大的并发压力。直接将大量数据存入数据库可能会导致数据库服务崩溃。

解决方案:使用消息队列

为了应对高并发情况,可以采用消息队列(如 RabbitMQ)来优化数据处理流程。
具体流程如下:

  • 数据接收与缓存:一个 Web 服务接收前端发送的数据请求,将数据存入 RabbitMQ,而不是直接写入数据库。
  • 数据处理与存储:另一个 Web 服务从 RabbitMQ 中取出数据,然后存入数据库。

这样做的好处是,消息队列的并发处理能力远高于数据库,可以快速响应并缓存大量请求,从而减轻数据库的直接压力。

消息队列的并发控制

通过设置消息队列的消费速率来控制数据流向数据库的速度,例如设置每次从队列中取出 1w 条消息进行处理。
这种方法可以有效避免数据库因突发大流量而崩溃,实现了流量削峰。

消息队列的扩展性

RabbitMQ 支持水平扩展,可以增加多个 Web 服务同时消费队列中的消息,进一步增强系统的处理能力。

运行 RabbitMQ 服务

我们可以通过 docker 来跑 RabbitMQ。
搜索 rabbitmq 的镜像,选择 3.11-management 的版本:
 

image.png


这个版本是有 web 管理界面的。
点击 run:
 

image.png


run 运行后,可以通过浏览器访问 http://localhost:15672 来管理消息队列,这就是它的 web 管理界面:
 

image.png


账号密码全输入 guest ,进入管理页面:
 

image.png


可以看到 connection、channel、exchange、queue 的分别的管理页面。

Node.js 实现 RabbitMQ

环境准备

首先,创建一个新的项目目录,并初始化 Node.js 项目:

 

bash

复制代码

mkdir rabbitmq-test cd rabbitmq-test npm init -y

安装依赖

安装 amqplib 包:

 

bash

复制代码

npm install amqplib

配置项目

由于我们将使用 ES module 语法和顶层 await,您需要在 package.json 中添加以下配置:

 

json

复制代码

"type": "module"

生产者设置

创建 src/producer.js 文件,并编写以下代码:

 

javascript

复制代码

// 引入 amqplib 库,用于操作 AMQP 协议(高级消息队列协议) import * as amqp from 'amqplib'; // 连接到本地的 RabbitMQ 服务,端口默认为 5672 const connect = await amqp.connect('amqp://localhost:5672'); // 创建一个通道,大部分的 API 操作都在通道中进行 const channel = await connect.createChannel(); // 声明一个队列,如果队列不存在则创建,名为 'test1' await channel.assertQueue('test1'); // 向名为 'test1' 的队列发送消息,消息内容为 'hello yun' await channel.sendToQueue('test1', Buffer.from('h

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值