我正在开发一个带有弹簧启动,弹簧批量和弹簧集成的项目。
我已经配置了spring-integration来在新消息到达时启动弹出批处理作业。
我向附加到JobLaunchingGateway的spring-integration频道发送消息,并且对于每条消息,JobLaunchingGateway尝试启动一个新的TaskExecutor。
让通道由持久队列支持(以ActiveMQ为例) 让task-executor pool-size等于2.
我想配置系统,以便在使用执行程序池大小时,JobLaunchingGateway不会使用新消息,而是保留在持久队列中。
有可能吗?有没有最好的做法。
我们将不胜感激。 提前致谢。
答案 0 :(得分:0)
您可以向TE添加队列限制并使用CallerBlocksPolicy' for the
RejectedExecutionHandler`。
但是,如果发生故障,您将丢失队列中的任务。
通常最好使用消息驱动的通道,将并发性设置为2并在侦听器容器线程上运行作业,而不是使用TE来运行作业。
额外的好处是如果作业失败,或者机器崩溃,您将不会丢失该请求。一旦交给TE,消息就会从队列中消失。