我想使用Spring Batch远程分区来处理云上的大量工作负载,并按需启动/关闭VM。
但是,在配置从属步骤时,我正在使用StepExecutionRequestHandler来处理来自JMS队列的步骤请求。现在,该应用程序刚刚挂起。队列耗尽后如何关闭应用程序?
答案 0 :(得分:0)
队列耗尽后如何关闭应用程序?
在远程分区设置中,工作程序是StepExecutionRequest
即将到来的队列上的侦听器。问题是从侦听器的角度如何知道队列已耗尽?这是一个棘手的设计问题。有一些已知的解决方案,例如“流结束”消息或“中毒”记录,但由于您必须确保所有侦听器都收到一条这样的消息,因此它们也很棘手。
如果您正在使用Spring Cloud Task启动工作程序,则可以使用DeployerPartitionHandler
,它提供了一种优雅的方式来按需动态创建工作程序,最多可配置数量。您可以在这里找到有关它的更多详细信息:https://docs.spring.io/spring-cloud-task/docs/2.0.0.RELEASE/reference/htmlsingle/#batch-partitioning和此github存储库中的示例:https://github.com/mminella/scaling-demos/blob/master/partitioned-demo/src/main/java/io/spring/batch/partitiondemo/configuration/BatchConfiguration.java#L75
可喜的是,它基于Spring Cloud Deployer,这意味着您可以在实现SCD SPI的任何云提供商上使用它。这是为此的方法: