taskScheduler pool

时间:2017-04-21 14:07:59

标签: java spring

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

这两个app有一个基于ThreadPoolTask​​Scheduler配置的taskScheduler。

@Configuration
public class TaskSchedulerConfig {

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

        return threadPoolTaskScheduler;
    }
}

昨天,我遇到了一种奇怪的行为:

  1. 已检测到警报并将其发送到新应用B - >行
  2. 应用B收到提醒并开始根据taskScheduler处理它 - >行
  3. 第一步已由应用B处理 - >行
  4. 第二步已由应用A处理 - > NOK,奇怪的行为
  5. 第三步已由应用B按预期处理 - >行
  6. 这怎么可能?对我来说,每个taskScheduler都附加到创建它的应用程序。我哪里错了?

    更新

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

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

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

1 个答案:

答案 0 :(得分:1)

由于两个不同的应用程序在隔离的进程中运行,因此无法执行此操作。线程(相同进程)在共享内存空间中运行,而进程在不同的内存空间中运行,因此没有“桥接”。他们之间。

如果他们共享同一个数据库,他们可能正在监听相同的事件,但前提是你已经实现了这个逻辑。

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