Spring integration 当组中的消息数量达到另一行消息中定义的数量时,释放组

Spring integration 当组中的消息数量达到另一行消息中定义的数量时,释放组,spring-integration,Spring Integration,我有一个批处理过程,我们在队列中接收开始消息,在同一队列中接收结束消息。在开始消息之后,我们在其他3个队列中接收数千条消息,我们对这些消息进行过滤、充实、聚合,最后转换为JSON。我们可以把这条管道称为干管) 在该开始消息之后,我们有一个适配器,它从数据库读取我们将接收的一条消息中的元素总数(我们可以将此管道称为计数器管道) 在结束消息之后,无论何时处理完所有消息,我们都必须向外部服务发送请求 因此,我们需要统计主管道中所有处理过的消息(JSON转换)并与计数器管道中的数字进行比较 我如何比较呢

我有一个批处理过程,我们在队列中接收开始消息,在同一队列中接收结束消息。在开始消息之后,我们在其他3个队列中接收数千条消息,我们对这些消息进行过滤、充实、聚合,最后转换为JSON。我们可以把这条管道称为干管)

在该开始消息之后,我们有一个适配器,它从数据库读取我们将接收的一条消息中的元素总数(我们可以将此管道称为计数器管道)

在结束消息之后,无论何时处理完所有消息,我们都必须向外部服务发送请求

因此,我们需要统计主管道中所有处理过的消息(JSON转换)并与计数器管道中的数字进行比较


我如何比较呢?

您是否介意描述一下您是如何从这些
3个队列中阅读的?我不清楚START和批处理的所有消息之间的关联在哪里。如果这是常规的消息驱动通道适配器,那么我们可能会开始接收这些消息,但数据库中仍然没有开始或没有关于计数的信息

无论如何,我会把它做成:

  • 开始和结束消息以及该批处理中的所有消息必须具有相同的
    CorrelateIonKey
    ,以便聚合器最终形成批处理

  • 由于案例中的组基于
    计数
    ,因此您没有选择权,除非您将
    过滤器中丢弃的消息发送到聚合器。这可能只是简单的错误存根,以便能够在聚合器的发布函数中正确区分它们

  • 聚合器的
    releaseStrategy
    必须在组中迭代,以查找具有
    计数的消息,并将其与组大小+2(开始和结束消息)进行比较


  • 这对你有意义吗?

    你的意思是创建一个定制的ReleaseStrategybean?所以,是的。项目消息可以显示在开始消息之前。因此,只有具有完整组扫描的聚合器才能帮助您。开始消息读取一个计数并同时到达聚合器。在结束之前,你不会释放团队。但是您仍然需要检查组大小并扫描具有所需大小的消息。当然,我的意思是,即使是
    ReleaseStrategy