移动到目标系统之前的文件数据验证
File data validation before moving to the target system
我想在发送到目标系统之前使用一些逻辑验证文件内的数据(以保持数据完整性)。为此,我正在使用这样的文件及其校验和文件逻辑,
abc.txt是原始文件abc.txt.checksum是它的校验和文件。 abc.txt.checksum 是 abc.txt 文件的哈希值,将用于在发送到目标之前进行验证 system.Both 文件将驻留在相同的源位置。
我有一个过滤条件,在轮询时不选择 .checksum 文件,因为我不想将 .checksum 文件发送到目标系统。
选择 abc.txt 文件后,我将使用一个 java 逻辑在内部创建该文件的哈希值并将其存储到内存中,并且必须与
该位置已经存在的校验和(abc.txt.checksum)数据。如果两个校验和数据匹配,则只需将原始文件移动到目标系统,否则它不应该处理并抛出错误。
有人可以指导我如何实现这一目标吗?或者我将如何获取 .checksum 文件 (abc.txt.checksum),因为它始终位于源位置?
您所解释的完全是 aggregator
组件的逻辑。
您轮询目录中的所有文件,按文件名前缀对它们进行分组。可以通过针对 FileHeaders.FILENAME
消息 header 的 correlationKey
的 SpEL 表达式来完成。这样 abc.txt
和 abc.txt.checksum
将被组合在一起。
然后,您可以通过 MessageGroupProcessor
从 aggregator
生成输出消息,方法是 checksum
存储在 header 中,并将原始文件作为要生成的单个消息的有效负载.
之后您就可以使用您的验证逻辑了,没有理由担心再进行一次目录往返。
聚合器的一点是,任何文件在其对到达之前都不会被发送到下游。
在参考手册中查看更多信息:https://docs.spring.io/spring-integration/reference/html/#aggregator
更新
既然你谈到了两个文件(原始文件和校验和),那么你有一个非常简单的 ReleaseStrategy
- (group) -> group.size() == 2
。 CorrelationStrategy
可以基于 FileHeaders.FILENAME
header,它在 FileReadingMessageSource
生成后与 File
有效载荷一起出现。该功能逻辑可能是这样的:
(message) -> message.getHeaders().get(FileHeaders.FILENAME, String.class).replaceFirst("\.checksum", "")
我想在发送到目标系统之前使用一些逻辑验证文件内的数据(以保持数据完整性)。为此,我正在使用这样的文件及其校验和文件逻辑, abc.txt是原始文件abc.txt.checksum是它的校验和文件。 abc.txt.checksum 是 abc.txt 文件的哈希值,将用于在发送到目标之前进行验证 system.Both 文件将驻留在相同的源位置。 我有一个过滤条件,在轮询时不选择 .checksum 文件,因为我不想将 .checksum 文件发送到目标系统。 选择 abc.txt 文件后,我将使用一个 java 逻辑在内部创建该文件的哈希值并将其存储到内存中,并且必须与 该位置已经存在的校验和(abc.txt.checksum)数据。如果两个校验和数据匹配,则只需将原始文件移动到目标系统,否则它不应该处理并抛出错误。 有人可以指导我如何实现这一目标吗?或者我将如何获取 .checksum 文件 (abc.txt.checksum),因为它始终位于源位置?
您所解释的完全是 aggregator
组件的逻辑。
您轮询目录中的所有文件,按文件名前缀对它们进行分组。可以通过针对 FileHeaders.FILENAME
消息 header 的 correlationKey
的 SpEL 表达式来完成。这样 abc.txt
和 abc.txt.checksum
将被组合在一起。
然后,您可以通过 MessageGroupProcessor
从 aggregator
生成输出消息,方法是 checksum
存储在 header 中,并将原始文件作为要生成的单个消息的有效负载.
之后您就可以使用您的验证逻辑了,没有理由担心再进行一次目录往返。
聚合器的一点是,任何文件在其对到达之前都不会被发送到下游。
在参考手册中查看更多信息:https://docs.spring.io/spring-integration/reference/html/#aggregator
更新
既然你谈到了两个文件(原始文件和校验和),那么你有一个非常简单的 ReleaseStrategy
- (group) -> group.size() == 2
。 CorrelationStrategy
可以基于 FileHeaders.FILENAME
header,它在 FileReadingMessageSource
生成后与 File
有效载荷一起出现。该功能逻辑可能是这样的:
(message) -> message.getHeaders().get(FileHeaders.FILENAME, String.class).replaceFirst("\.checksum", "")