首页生活资讯正文

一套万能通用的异步处理方案

2024-09-04 次浏览

前言

一套万能通用的异步处理方案
(图片来源网络,侵删)

目标

长处

原理

组件

设计模式

流程图

数据库剧本

异步策略

平安级别

执行状况

流程图

apollo 设置装备摆设

用法

注意

后果展现

github地址

1前言

优越的体系设计必需要做到开闭原则,跟着营业的赓续迭代更新,焦点代码也会被赓续修改,失足的概率也会年夜年夜增长。然则年夜部门增长的功效都是在扩大原有的功效,既要保证机能又要保证质量,我们每每都邑使用异步线程池来处置,然而却增长了许多不肯定性因素。

由此我设计了一套通用的异步处置SDK,可以很轻松的实现各类异步处置
2目标

经由过程异步处置不仅可以或许保证办法可以或许获得有用的执行并且不影响主流程

更紧张的是各类兜底办法保证数据不丧失,从而到达终极同等性

3长处

无侵入设计,自力数据库,自力准时义务,自力新闻行列步队,自力人工执行界面(同一登录认证)

使用spring事务变乱机制,纵然异步策略解析失败也不会影响营业

假如你的办法正在运行事务,会等事务提交后或回滚后再处置变乱

就算事务提交了,异步策略解析失败了,我们还有兜底计划执行(除非数据库有问题,新闻行列步队有问题,办法有bug)

4原理

容器初始化bean完成后遍历所有办法,把有@AsyncExec表明的办法缓存起来

办法运行时经由过程AOP切面宣布变乱

事务变乱监听处置异步执行策略

@TransactionalEventListener(fallbackExecution = true, phase = TransactionPhase.AFTER_COMPLETION)

fallbackExecution=true没有事务正在运行,依然处置变乱

TransactionPhase.AFTER_COMPLETION事务提交后和事务回滚后都处置变乱

5组件

kafka 新闻行列步队

xxl job 准时义务

mysql 数据库

spring 切面

vue 界面

6设计模式

策略

模板办法

动态署理

7流程图8数据库剧本

CREATE TABLE `async_req` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`application_name` varchar(100) NOT NULL DEFAULT '' COMMENT '利用名称',
`sign` varchar(50) NOT NULL DEFAULT '' COMMENT '办法署名',
`class_name` varchar(200) NOT NULL DEFAULT '' COMMENT '全路径类名称',
`method_name` varchar(100) NOT NULL DEFAULT '' COMMENT '办法名称',
`async_type` varchar(50) NOT NULL DEFAULT '' COMMENT '异步策略类型',
`exec_status` tinyint NOT NULL DEFAULT '0' COMMENT '执行状况 0:初始化 1:执行失败 2:执行胜利',
`exec_count` int NOT NULL DEFAULT '0' COMMENT '执行次数',
`param_json` longtext COMMENT '哀求参数',
`remark` varchar(200) NOT NULL DEFAULT '' COMMENT '营业描写',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立光阴',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新光阴',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_applocation_name` (`application_name`) USING BTREE,
KEY `idx_exec_status` (`exec_status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异步处置哀求';

CREATE TABLE `async_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`async_id` bigint NOT NULL DEFAULT '0' COMMENT '异步哀求ID',
`error_data` longtext COMMENT '执行差错信息',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立光阴',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_async_id` (`async_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异步处置日记';

9异步策略
10平安级别11执行状况12流程图



13apollo 设置装备摆设

# 开关:默认封闭
async.enabled=true

# 利用名称
spring.application.name=xxx

# 数据源 druid
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/fc_async?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=true
spring.datasource.username=user
spring.datasource.password=xxxx
spring.datasource.filters=config
spring.datasource.connectionProperties=config.decrypt=true;config.decrypt.key=yyy
#静态地址
spring.resources.add-mappings=true
spring.resources.static-locations=classpath:/static/

# 以下设置装备摆设都有默认值
# 焦点线程数
async.executor.thread.corePoolSize=10
# 最年夜线程数
async.executor.thread.maxPoolSize=50
# 行列步队容量
async.executor.thread.queueCapacity=10000
# 活跃光阴
async.executor.thread.keepAliveSeconds=600

# 执行胜利是否删除记载:默认删除
async.exec.deleted=true

# 自界说行列步队名称前缀:默认利用名称
async.topic=${spring.application.name}

# 重试执行次数:默认5次
async.exec.count=5

# 重试最年夜查询数目
async.retry.limit=100

# 赔偿最年夜查询数目
async.comp.limit=100

# 登录拦阻:默认false
async.login=false

14用法

1,异步开关

scm.async.enabled=true

2,在必要异步执行的办法加表明 (必需是spring署理办法)

@AsyncExec(type = AsyncExecEnum.SAVE_ASYNC, remark = "大众数据字典公众)

3,人工处置地址

http://localhost:8004/async/index.html
15注意

1,利用名称

spring.application.name

2,行列步队名称

${async.topic:${spring.application.name}}_async_queue

自界说topic:async.topic=xxx

3,本身营业要做幂等

4,一个利用公用一个行列步队

自产自消

5,准时义务

异步重试准时义务(2分钟重试一次,可设置装备摆设重试次数)

异步赔偿准时义务(一小时赔偿一次,创立光阴在一小时之前的)

16后果展现17github地址

https://github.com/xiongyanokok/fc-async.git

IT架构师/技术年夜咖的交流圈子,为您提供架构系统常识、技术文章、流行实践案例、办理计划等,行业年夜咖分享交流/同业履历分享互动,等待你的参加!扫码即可参加哦,跟着资料赓续增多社群会不按期涨价早参加更优惠

免责声明:

本"号部门分享的材料来自收集网络和整顿,所有笔墨和图片版权归属于原作者所有,且仅代表作者小我概念,与本"号无关,文章仅供读者进修交流使用,并请自行核实相关内容,如文章内容涉及侵权,请接洽后台治理员删除。

异步asyncCOMMENT
生活养生小知识 从“青春美文”到长篇小说乔叶用《宝水》写出中原农村精气神|名人堂-专访
相关内容