作业启动网关和持久队列

时间:2016-10-28 09:06:49

标签: spring-integration spring-batch

我正在开发一个带有弹簧启动,弹簧批量和弹簧集成的项目。

我已经配置了spring-integration来在新消息到达时启动弹出批处理作业。

我向附加到JobLaunchingGateway的spring-integration频道发送消息,并且对于每条消息,JobLaunchingGateway尝试启动一个新的TaskExecutor。

让通道由持久队列支持(以ActiveMQ为例) 让task-executor pool-size等于2.

我想配置系统,以便在使用执行程序池大小时,JobLaunchingGateway不会使用新消息,而是保留在持久队列中。

有可能吗?有没有最好的做法。

我们将不胜感激。 提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以向TE添加队列限制并使用CallerBlocksPolicy' for the RejectedExecutionHandler`。

但是,如果发生故障,您将丢失队列中的任务。

通常最好使用消息驱动的通道,将并发性设置为2并在侦听器容器线程上运行作业,而不是使用TE来运行作业。

额外的好处是如果作业失败,或者机器崩溃,您将不会丢失该请求。一旦交给TE,消息就会从队列中消失。