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

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

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

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

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

一、业务逻辑拆分

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

二、消息合并

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

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

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

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

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

相关推荐

  1. .Net6 RabbitMq消息订阅/发布优化

    2024-01-18 16:42:06       62 阅读
  2. 使用vue连接rabbitMq

    2024-01-18 16:42:06       32 阅读
  3. kafka--发布-订阅消息系统

    2024-01-18 16:42:06       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 16:42:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 16:42:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 16:42:06       87 阅读
  4. Python语言-面向对象

    2024-01-18 16:42:06       96 阅读

热门阅读

  1. Elasticsearch 多索引条件过滤:字段匹配

    2024-01-18 16:42:06       55 阅读
  2. 算法--插值法

    2024-01-18 16:42:06       57 阅读
  3. UnityShader UsePass介绍

    2024-01-18 16:42:06       56 阅读
  4. Vue-组件缓存-keep-alive

    2024-01-18 16:42:06       53 阅读
  5. 边缘计算和联邦学习的联系

    2024-01-18 16:42:06       48 阅读
  6. 边缘计算的挑战和机遇——数据安全与隐私保护

    2024-01-18 16:42:06       61 阅读
  7. 【无标题】

    2024-01-18 16:42:06       54 阅读