我目前有一个工作正常的Spring Integration流程(参见图表链接)。我想在我当前配置的基础上添加Batch,以允许使用指数退避,断路器模式和持久作业重试到数据库以重新启动。
集成流程包含一个接收消息< MyObj>的网关,该消息最终被路由到转换消息< MyObj>的Transformer。到消息< String>。然后聚合器接收消息< String>并最终发布连接的消息< String> (同时使用size release-strategy和MessageGroupStoreReaper以及超时)。然后,串联的String是使用SFTP出站通道适配器上载的文件的有效负载。
我已经搜索过,通过文档阅读,查看了大量示例,我无法弄清楚如何将流程的最后一步封装到批处理作业中。如果在上载过程中出现SFTP连接问题或其他异常,我需要能够重试上传字符串(作为文件的有效负载)。我也希望能够在发生故障时重新启动(使用数据库支持的JobRepository),所以我认为使用Retry Advice是不够的。
请解释并帮助我了解如何将各个部分连接在一起以及使用哪些部分(作业启动网关,MessageToJobRequest Transformer,ItemReader,ItemWriter ??)。我也不确定如何访问每个消息< String>并发送到Job,Step或Tasklet内的SFTP通道适配器。
当前流程:
答案 0 :(得分:0)
首先让我们来看看如何在没有Batch的情况下克服您的要求。
<int-sftp:outbound-channel-adapter>
有<request-handler-advice-chain>
,您可以在其中配置RequestHandlerRetryAdvice
和RequestHandlerCircuitBreakerAdvice
。
要实现restartable
选项,您可以将该适配器的输入通道设为message-store
的持久队列。
现在关于Batch。
要从Integration流程启动作业,您应该编写一些MessageToJobRequest
并在此之后使用<batch-int:job-launching-gateway>
。当然,您可以将payload
放置到jobParameters
。
要将作业中的消息发送到某个频道(例如发送到sftp适配器),您可以使用org.springframework.batch.integration.chunk.ChunkMessageChannelItemWriter
。
在此处阅读更多内容:http://docs.spring.io/spring-batch/reference/html/springBatchIntegration.html