.Net6 记一次RabbitMq消息订阅/发布优化

首先介绍一下项目情况,项目需要设备在线实时采集,最高采集频率为1次/秒,设备上传数据时,协议规定的是10条/包,服务端通过rabbitMq接收消息,并进行存储、预警、推送等进行多层处理,因为web端要求数据实时展示,且延时不得超过1分钟,因数据量较大,消息处理不满足要求,故需要进行优化,主要分为一下三个方面:

1、首先,拆分各处理逻辑,用不同的服务进行分别处理

2、通过rabbitMq把消息发布到下一层,发布时进行合并,减少消息发布量

3、通过异步多线程的方式去处理任务

一、业务逻辑拆分

业务逻辑拆分通过WorkerService来实现,把存储、预警、推送分别分为不同的WorkerService来进行业务逻辑处理。

二、消息合并

消息合并又分为两部分,一是发布时把多个数据包消息合并之后统一进行发布,二是发布消息使用批量发布的方式。

数据合并,首先创建一个线程安全的全局变量集合A,消息订阅后,放到统一放到集合A中,当集合A中的数据达到设定的阈值(比如500条)时统一进行。

批量消息发布,代码见上篇:.Net 6 下WorkerService+RabbitMq实现消息的异步发布订阅-CSDN博客

这里不进行代码的展示,仅分享优化思路,当然过程中还有很多其他的实现小细节,由于当时没记录,现在有点忘记了,等想起来再进行补充。

经优化后,项目满足了2000台设备数据的实时上报,但未进行上限测试,优化效果还是非常明显的。

相关推荐
1-1=05 分钟前
.NET 实现后台任务
c#·.net·.netcore·quartz·hangfire
步步为营DotNet22 分钟前
从分代预算到 DATAS:.NET GC 调优到底在调什么
c#·.net·内存管理·gc·datas
淡海水24 分钟前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc
曹牧44 分钟前
C#:字符串占位符与值数量不一致
开发语言·数据库·c#
Linux实战笔记1 小时前
记一次消息队列选型对比线上排查:Kafka/RabbitMQ/Pulsar 技术选型
kafka·rabbitmq·高并发·pulsar·消息队列选型
张彦峰ZYF2 小时前
一条消息的丢与重:Kafka 与 RabbitMQ 可靠投递的确认、位点、死信与幂等全链路
后端·kafka·消息队列·rabbitmq·isr·解耦与削峰·丢失与重复
玩泥巴的19 小时前
MAF + 飞书:让大模型干活,但别让它乱干
ai·c#·.net·飞书·agent
cpp_w1 天前
C#基础3- 面向对象中级应用3
后端·c#
步步为营DotNet1 天前
Async 状态机要搬进运行时了:.NET 10 Runtime Async 实测,快的地方快 1.5 倍,贵的地方贵 5 倍
性能优化·c#·.net·async·runtime
hixiong1231 天前
C# 使用 ZXingCpp.Angle 进行条码、二维码识别
开发语言·c#·扫码