Spring 集成消息通道 - 基于内存或基于文件

问题描述 投票:0回答:1

我想评估一下spring集成是否适合我们当前的需求。

我们将收到一个包含 100 万笔交易的输入流(让我们考虑下面代码中的 A 是一笔交易。一笔交易的大小将为 4KB)。

<A>

</A>

<A>

</A>

....

<A>

</A>

我们会根据一些条件将交易拆分成多条记录( )。

我们将聚合每个组并将其推送到另一个系统。

您能帮我理解以下内容吗?

  1. 整个过程是基于内存的,还是我们可以选择将其存储在文件中?我们计划在K8S中运行。容器的最大大小为 1GB。我们预计每分钟至少有 20 笔交易。我担心如果我们使用内存操作,最终会出现性能或服务中断问题。

  2. 是否必须使用聚合器?因为我们将使用过滤器来隔离文件。

  3. 如果我使用队列消息通道,则任何两个事务都不会使用相同的队列对象。这是正确的吗?

spring-integration
1个回答
0
投票

聚合器对于您的用例来说实际上并不是强制性的。即使您为聚合器使用持久性

MessageGroupStore
,最终当您释放组时,您也会将所有消息加载回内存。

是的,我认为您可以选择将结果数据收集到单个文件中。请参见

FileWritingMessageHandler
FileExistsMode.APPEND
。因此,所有拆分器记录将在流程结束时写入同一文件。我认为您甚至可以为聚合器提出一个策略,将已发布的组作为单个回复消息写入文件。

我不确定你关于

QueueChannel
的问题,但你的假设可能是错误的。它只是端点之间的通道,因此发送到它的所有消息都将使用相同的队列对象。我会研究
ExecutorChannel
,而不是能够并行处理分割的数据。

© www.soinside.com 2019 - 2024. All rights reserved.