加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – taskScheduler池的奇怪行为

发布时间:2020-12-15 01:30:06 所属栏目:大数据 来源:网络整理
导读:我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一的应用程序,其中包含用于处理警报的部分代码,而应用程序B是一个仅处理警报的新专用应用程序.这里的目标是打破小应用程序中的monolotic应用程序.现在,这两个代码一起运行

我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一的应用程序,其中包含用于处理警报的部分代码,而应用程序B是一个仅处理警报的新专用应用程序.这里的目标是打破小应用程序中的monolotic应用程序.现在,这两个代码一起运行,因为我有旧系统,总是调用应用程序A.

这两个应用程序有一个基于ThreadPoolTask??Scheduler配置的taskScheduler.

@Configuration
public class TaskSchedulerConfig {

    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
        threadPoolTaskScheduler.setPoolSize(100);

        return threadPoolTaskScheduler;
    }
}

昨天,我经历了一个奇怪的行为:

>已检测到警报并将其发送到新应用B – >好
>应用程序B收到警报并开始根据taskScheduler处理它 – >好
>第一步已由应用程序B处理 – >好
>第二步已由应用程序A处理 – > NOK,奇怪的行为
>第三步已由应用B按预期处理 – >好

这怎么可能?对我来说,每个taskScheduler都附加到创建它的应用程序.我哪里错了?

UPDATE

我有一个发出警报的真实盒子.这些警报必须由新应用程序处理.但我还有旧盒子没有迁移到新系统.所以我在两个不同的项目中有处理代码.

我有一个新代码的新框,它在新系统上创建了一个警报.此警报生成一个状态机,该状态机与任务调度程序异步处理.创建警报后,新应用程序开始处理状态机,并在处理过程中唤醒旧应用程序并处理警报步骤.之后,新应用程序再次唤醒并正常关闭警报.

问题是:为什么旧应用程序会唤醒以处理警报? threadPoolTask??Scheduler是否存在已知问题?

最佳答案
由于它们在隔离的进程中运行,因此两种不同的应用程序无法实现此行为.线程(相同进程)在共享内存空间中运行,而进程在不同的内存空间中运行,因此它们之间没有“桥接”.

如果它们共享同一个数据库,则它们可能正在侦听相同的事件,但前提是您已实现该逻辑.

如果我不得不猜测,鉴于两者都是webapps,我会说在代码中的某个地方可能会有一些HTTP调用,仍然针对一个旧的端点,或者服务器内的一些其他触发器(crons?)启动旧的应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读