使用 spring 批处理读取大文件并发送到 jms 队列
Read large files and send to jms queue using spring batch
我有一个场景可以读取一个巨大的文件并将记录发送到 jms 队列以进行进一步处理。
该文件可以是 CSV/FIX 格式。我打算使用 Spring 批处理来实现相同的目的。
当我们使用 spring batch.
时,我读到了 MultiResourcePartitioner 用于读取大文件
在这种情况下使用 spring batch 是个好主意吗?或者我应该使用纯 java 代码来读取大文件吗?或者对于这种情况还有其他更好的方法吗?
我认为 Spring 批处理是您用例的不错选择,原因有以下几个:
- 您可以使用开箱即用的
FlatFileItemReader
和 JmsItemWriter
(与使用普通 Java 自己编写此代码相比)
- 您将有多个缩放选项(见下文)
- 面向块的处理模型适用于像您的用例中的大型数据集
- 以及许多其他免费功能(事务管理、可重启性等)
将输入文件物理分区为多个资源并使用 MultiResourcePartitioner
对于您的用例来说确实是一个不错的选择。然而,这并不是在 Spring Batch 中缩放面向块的步骤的唯一方法,您还可以使用:
- A multi-threaded step 每个块在单独的线程中处理
AsyncItemProcessor
/AsyncItemWriter
的组合(如果在将项目写入队列之前需要对项目进行大量处理,这很有用)
前面的 3 种缩放技术是在单个 JVM 中实现的。还有其他选项可以跨多个 JVM 扩展批处理作业,例如远程分块和远程分区(但对于您的用例,IMO 不需要这些)。
您可以在此处通过代码示例找到有关所有这些缩放技术的讨论:https://www.youtube.com/watch?v=J6IPlfm7N6w
希望对您有所帮助。
我有一个场景可以读取一个巨大的文件并将记录发送到 jms 队列以进行进一步处理。 该文件可以是 CSV/FIX 格式。我打算使用 Spring 批处理来实现相同的目的。 当我们使用 spring batch.
时,我读到了 MultiResourcePartitioner 用于读取大文件在这种情况下使用 spring batch 是个好主意吗?或者我应该使用纯 java 代码来读取大文件吗?或者对于这种情况还有其他更好的方法吗?
我认为 Spring 批处理是您用例的不错选择,原因有以下几个:
- 您可以使用开箱即用的
FlatFileItemReader
和JmsItemWriter
(与使用普通 Java 自己编写此代码相比) - 您将有多个缩放选项(见下文)
- 面向块的处理模型适用于像您的用例中的大型数据集
- 以及许多其他免费功能(事务管理、可重启性等)
将输入文件物理分区为多个资源并使用 MultiResourcePartitioner
对于您的用例来说确实是一个不错的选择。然而,这并不是在 Spring Batch 中缩放面向块的步骤的唯一方法,您还可以使用:
- A multi-threaded step 每个块在单独的线程中处理
AsyncItemProcessor
/AsyncItemWriter
的组合(如果在将项目写入队列之前需要对项目进行大量处理,这很有用)
前面的 3 种缩放技术是在单个 JVM 中实现的。还有其他选项可以跨多个 JVM 扩展批处理作业,例如远程分块和远程分区(但对于您的用例,IMO 不需要这些)。
您可以在此处通过代码示例找到有关所有这些缩放技术的讨论:https://www.youtube.com/watch?v=J6IPlfm7N6w
希望对您有所帮助。