1、消息系统做事件驱动
2、spring stateMachine做状态转换控制
3、在listener中作持久化到db2表
spring-boot-starter-redis做应用级缓存
spring boot做整合
状态机引擎选型
https://segmentfault.com/a/1190000009906317
事件驱动好处:
1.要理解事件驱动和程序,就需要与非事件驱动的程序进行比较。实际上,现代的程序大多是事件驱动的,比如多线程的程序,肯定是事件驱动的。早期则存在许多非事件驱动的程序,这样的程序,在需要等待某个条件触发时,会不断地检查这个条件,直到条件满足,这是很浪费cpu时间的。而事件驱动的程序,则有机会释放cpu从而进入睡眠态(注意是有机会,当然程序也可自行决定不释放cpu),当事件触发时被操作系统唤醒,这样就能更加有效地使用cpu.
事件驱动的程序,必定会直接或者间接拥有一个事件队列,用于存储未能及时处理的事件。
4.事件驱动的程序的行为,完全受外部输入的事件控制,所以,事件驱动的系统中,存在大量这种程序,并以事件作为主要的通信方式。
5.事件驱动的程序,还有一个最大的好处,就是可以按照一定的顺序处理队列中的事件,而这个顺序则是由事件的触发顺序决定的,这一特性往往被用于保证某些过程的原子化。
当我们将事件发送到具体的视图时,实际上我们完成了一个根本性的变化:从传统的流线型程序结构到事件触发方式的转变。这样应用程序具备相当的柔性,可以应付种种离散的、随机的事件。
Disruptor 可以用来代替进程内的 queue。
for (PicCrdInf picCrd : picCrdList) {
if (!StringUtils.isBlank(picCrd.getAppNbr())) {
String appNbr = picCrd.getAppNbr();
String imgPhyId = getPhyIdByAppNbr(appNbr,crdAppImgAttrList);
//没物理Id的直接退出
if (com.cmbchina.cc.framework.utils.StringUtils.isEmptyString(imgPhyId)) {
// log.error("3.1.x.物理ID为空,appNbr:" + appNbr + ", imgPhyId:"+imgPhyId);
continue;
}else{
log.info("3.1.appNbr:" + appNbr + ", imgPhyId:"+imgPhyId);
ImgIdInfDto i = new ImgIdInfDto(picCrd.getCrdOrdNbr(), imgPhyId);
executor.execute(new DownPicTsk(insta, picCrd, i));
cntTask++;
}
}
}
//所有下载完成才退出
while (true) {
// log.info("线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+
// executor.getQueue().size()+",已执行完成的任务数目:"+executor.getCompletedTaskCount());
log.info(String.format("[monitor] [%d/%d] Active: %d, Completed: %d, Task: %d, isShutdown: %s, isTerminated: %s",
executor.getPoolSize(),
executor.getCorePoolSize(),
executor.getActiveCount(),
executor.getCompletedTaskCount(),
executor.getTaskCount(),
executor.isShutdown(),
executor.isTerminated()));
log.info("crdAppImgAttrList数目:"+crdAppImgAttrList.size()+",cntTask:"+cntTask);
if (crdAppImgAttrList.size() == executor.getCompletedTaskCount()) {
break;
}else{
Thread.sleep(2000);
}
}
ThreadPoolExecutor executor = new ThreadPoolExecutor(coreSize, maxPoolSize, keepAliveSeconds, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(queueCapacity),Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy()){
@Override
protected void terminated() {
log.info("线程池已处于TERMINATED状态");
}
};
相关推荐
上海博通BK2461设计参考资料+硬件+范例程式 1. /BK2461 Datasheet v0.3.pdf bk2461的数据手册 2. /USB_Bulk_驱动: 首次在电脑上使用开发板需要安装驱动,该文件为驱动文件 3. /bk2461应用开发指南.pdf 开发...
JDBC,java的参考资料
本科生 ORACLE数据库选修课 参考资料书目清单
机器学习参考资料
最全 mybatis各类参考资料 jar包、 案例、学习文档最全 mybatis各类参考资料 jar包、 案例、学习文档最全 mybatis各类参考资料 jar包、 案例、学习文档最全 mybatis各类参考资料 jar包、 案例、学习文档最全 mybatis...
数据结构参考资料手册
校园网络安全 课程设计参考资料 模板 校园网络安全 课程设计参考资料 模板
JAVA 课程设计 参考资料 在课程设计中会有很大的帮助
HTML+CSS+ASP+JavaScript+VbScript的参考资料
技术文档参考资料周版 技术文档参考资料周版 技术文档参考资料周版
计算机网络参考资料.zip
有关sql的参考资料,学习笔记
SCSA认证教材模拟测试参考资料
stm32中文参考资料,STM32F10xxx参考手册,依据STM32 Reference Manual (RM0008)翻译的
参考资料-水利工程全套表格及填写范例.zip
电子-参考资料1.PDF,单片机/嵌入式STM32-F0/F1/F2
数据库设计的相关的代码资料。数据库课程设计的参考资料.rar(1.82M).jsp
尾矿设施设计资料
上CCNA培训时候的资料,华为网络工程师的参考资料,
网络操作系统复习参考资料,讲解详细,有了他考试也不怕