共性化异步任务处理

背景

考虑到现有业务很多依赖于MQ的方式进行,这种方式需要依赖于MQ,发送消息到mq和消费mq消息时需要了解mq消息结构进行相应处理;

对于后续对同样的事件做其他处理的人如不能提前了解到已有相应消息发到了mq就得再发一次消息到mq等。

                    图1.1 消息中间件

现需要考虑在不依赖于Mq的形式下如何更优雅地实现异步任务处理!!!

一.消息任务

1.1 现有轮询方式

轮询:针对每一个业务记录一张轮询中间表,通过轮询扫描消费。

优点:

1. 时间性把控粒度高。

2. 每个业务彼此分离,互不干涉。

缺点:

1. 每次创建业务都要建立一张属于自己的轮询表,也要建立一个新的轮询配置。

2. 资源消耗大。

3. 研发效率低。

1.2优化方式

模拟RabbitMq的ACK方式建立一张共性表解决通用性业务的消息体存储,共性化业务通用一个轮询。

模拟RabbitMq的ACK模式,使用轮询的方式替代mq的消息发送机制。制定专属表字段Table_Name模拟RabbitMq的RoutingKey。

每个业务处理通过Table_Name方式实现接口进行派发处理。每个实现了轮询逻辑派发接口的类即可以认为是一个队列。

以这种方式可以有效的实现消息的异步处理。

优点:

1. 代码规范化,每个服务中心只需要建立集中的一个轮询业务;

2. 符合开闭原则,每增加一个轮询处理只要多实现一个接口类即可;

3.可以减少数据库资源的消耗;

4.减少无用代码的增加,提高开发效率。

缺点:

1.由于数据量的增加,轮询压力增大,对特殊业务的轮询时间性无法针对性的把控,需要建立特殊业务轮询处理(增加轮询)。

二.演变模型

2.1演化方向:模型由图1.2 ——》 图1.3

                    图1.2 RabbitMQ

                    图1.3 定时任务模拟图

三.ACK模式

3.1什么是ack模式?

RabbitMQ 的 ACK 模式是指消息确认机制,即消费者消费消息后需要向 RabbitMQ 服务器发送一个 ACK(acknowledgement)信号来告诉服务器该消息已经被处理。

ACK 模式主要有以下两种:

1.自动确认模式(autoAck)

在自动确认模式下,消费者在收到消息后会立即向RabbitMQ 服务器发送一个 ACK 信号,表示该消息已经被消费。

这种模式适用于对于消息的可靠性要求不高的场景,比如日志处理等。

2.手动确认模式(manualAck)

手动确认模式下,消费者需要在处理完消息后,主动向RabbitMQ 服务器发送 ACK 信号。

如果消费者没有发送 ACK 信号,RabbitMQ 认为该消息没有被正确处理,并将该消息重新分发给其他消费者。

此外,在手动确认模式下,如果消费者在处理消息时出现异常,可以通过拒绝消息(NACK)来告诉 RabbitMQ 服务器该消息不能被处理,

此时 RabbitMQ 将会将该消息重新分发给其他消费者或保存到死信队列中。

四.表结构

4.1建立合适的表结构

1. Uid,table_name,msg,remark,ack

2. Hisid,Uid,table_name,msg,remark,ack (历史表,用于记录处理过的消息)

(表名称和字段名称可根据业务自行命名,以上数据结构供参考,可自行根据业务外拓字段)

五.消息体

1.规范化msg的输入形式。可以走切面或者监听的方式异步记录。写一个公用方法写入(特殊业务可调用该方法写入)。

2.规范化Table_Name字段:采用驼峰名称,代表哪个表写进来的数据。

3.规范化ack,默认设置为0;消费完成,写入2表(历史表)。

如有特殊要处理的,可以增加业务逻辑通过ack模式处理,这里ack默认值为0;

默认轮询处理失败一次ack自增1 。通用轮询方法只扫ack默认为0或者1的。

Ack不等于0,1的,通过二次轮询,第二个特殊轮询业务处理。(减少通用轮询的压力,避免造成轮询卡单。消息消费延缓等问题)。

如有特殊业务申请对应轮询:需要申请ack默认值处理。比如特殊业务1,ack值设置100。(0-9不建议,给默认通用轮询留下可用空间;

每次申请的特殊轮询ack默认在原先基础最大值上增加100,每次建立轮询通过这个方案执行的ack都要走申请,避免ack重复)。

六.实现类图

方案一:

                                            图1.4 类图

方案二:  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/364089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Paper - 蛋白质刚性对接(Rigid Protein-Protein Docking)的 ElliDock 算法

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/135973005 论文:ElliDock: Rigid protein-protein docking via equivariant elliptic-paraboloid interface prediction, ICLR 2024 …

【复现】智邦国际ERP SQL注入漏洞_36

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 智邦国际“一体化ERP”各类产品线,通过一体化ERP经典型、行业型、简易型、云应用、SAAS平台等产线产品,提…

【CSS】移动端适配

移动端适配怎么做? 适配的目的是在屏幕大小不同的终端设备拥有统一的界面,让拥有更大屏幕的终端展示更多的内容。 meta viewport (视口) 移动端初始视口的大小默认是980px,因为世界上绝大多数PC网页的版心宽度为980px ,如果网页…

7.4 Highest Locker Protocol/Pattern

Bruce Powel Douglass大师介绍-CSDN博客https://blog.csdn.net/ChatCoding/article/details/134665868嵌入式软件开发从小工到专家-CSDN博客https://blog.csdn.net/ChatCoding/article/details/135297955C嵌入式编程设计模式源码-CSDN博客https://blog.csdn.net/ChatCoding/art…

IT行业中最重要的证书

在IT行业,拥有一些含金量较高的证书是职业发展的关键。这些证书不仅可以证明技能水平,还有助于提升在职场上的竞争力。本文将介绍几个IT行业中最重要的证书。 1. Cisco认证 CCNA(Cisco Certified Network Associate)是Cisco公司新…

Acrel-1200分布式光伏运维平台屋顶光伏工商业屋顶光伏应用

上海安科瑞电气股份有限公司 胡冠楠 咨询家:“Acrelhgn”,了解更多产品资讯 行业现状 “十四五”期间,随着“双碳”目标提出及逐步落实,本就呈现出较好发展势头的分布式光伏发展有望大幅提速。就“十四五”光伏发展规划&#xf…

关键字const

1.定义常量 const int a; 2.定义常量指针 1.不可以通过常量指针来修改其指向的内容。 2.不能把常量指针赋值给非常量指针,反过来可以。 3.函数参量为常函数指针时,可以避免函数内部不小心改变指针所指地方的内容。

Linux ---- Shell编程之免交互

一、Here Document 多行重定向 1、Here Document定义 使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品Here Document 是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件…

猫什么时候发腮?公认发腮效果好的生骨肉冻干推荐

猫什么时候发腮是许多猫主人非常关心的问题。在猫咪的成长过程中,发腮是一项重要的体征,也是猫咪成熟的标志。想要让猫咪拥有可爱的肉嘟嘟脸型,主人需要在适龄的年龄段加强营养补给,不要错失最佳发腮期。那么,猫咪的最…

netty源码:(58)NioEventLoop中处理IO事件和普通事件的时间比例是多少?

在NioEventLoop的run方法中有如下代码片段: 当ioRatio不为100时,首先通过System.nanoTime()获取IO事件的开始处理时间,然后调用processSelectedKeys方法处理IO时间,然后再计算IO事件执行了多长时间。最后通过ioTime(I…

《区块链简易速速上手小册》第4章:区块链与加密货币(2024 最新版)

文章目录 4.1 比特币与区块链4.1.1 比特币基础4.1.2 比特币交易的工作流程:4.1.3 拓展案例 1:闪电网络4.1.4 拓展案例 2:比特币ATM 4.2 其他主要加密货币4.2.1 加密货币的多样性4.2.2 以太坊的案例4.2.3 拓展案例 1:非同质化代币&…

springboot 整合 PowerJob实现定时任务调度

最近项目需要使用定时任务,而使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob! 简介 PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样…

【JavaEE Spring】Spring AOP

Spring AOP 1. AOP概述2. Spring AOP快速⼊⻔2.1 引⼊AOP依赖2.2 编写AOP程序 3. Spring AOP详解3.1 SpringAOP核⼼概念3.1.1 切点(Pointcut)3.1.2 连接点(JoinPoint)3.1.3 通知(Advice)3.1.4 切⾯(Aspect) 3.2 通知类型3.3 PointCut3.4 切⾯优先级Order3.5 切点表达式3.5.1 ex…

什么是网络数据抓取?有什么好用的数据抓取工具?电商数据API免费测试入口

什么是网络数据抓取 网络数据抓取(Web Scraping)是指采用技术手段从大量网页中提取结构化和非结构化信息,按照一定规则和筛选标准进行数据处理,并保存到结构化数据库中的过程。目前网络数据抓取采用的技术主要是对垂直搜索引擎&a…

Maya------布尔 圆形圆角组件

17. maya常用命令7.布尔 圆形圆角组件_哔哩哔哩_bilibili 选中一个模型,再按shift加选另外一个模型 圆形圆角命令

QT5.14+VS2017安装踩过的一些坑

1.在QT中使用MSVC只能用VS2017,相应的调试器的版本只能用15.9,高于15.9的亲测都不行。完整的安装除了需要QT5.15和VS2017,还需要Windows SDK (10.0.22621) 下载地址:https://developer.microsoft.com/zh-cn/windows/downloads/win…

Qt读写Execl:QXlsx库

Qt三方库开发技术:QXlsx介绍、编译和使用 我自己记录的实例代码:https://download.csdn.net/download/cao_jie_xin/88795216 目录 一、概述二、下载三、编译四、加载QXlsx静态库五、介绍一些常用的功能1、一些头文件和命名空间2、创建一个excel文件3、…

消息中间件之RocketMQ源码分析(四)

消费者的Rebalance机制 客户端是通过Rebalance服务做到高可靠的。当发生Broker掉线、消费者实例掉线、 Topic扩容等各种突发情况时,消费者组中的消费者实例是怎么重平衡的,以支持全部队列的正常消费的? Rebalance服务的类图 RebalanceImpl的核心属性 …

CHS_06.2.3.4_2+用信号量实现进程互斥、同步、前驱关系

CHS_06.2.3.4_2用信号量实现进程互斥、同步、前驱关系 知识总览信号量机制实现进程互斥信号量机制实现进程同步信号量机制实现前驱关系 知识回顾 各位同学 大家好 在这个小节中 我们要学习怎么用信号量机制来实现进程的同步互制关系 知识总览 那么 我们之前学习了互斥的几种软…

【C++杂货铺】详解类和对象 [下]

个人博客:代码菌-CSDN博客 专栏:C杂货铺_代码菌的博客-CSDN博客 目录 🌈前言🌈 📁 初始化列表(灰常重要) 📂 引入 📂 概念 📂 特性 📁 拓展构…