使用 SQS 和 Spring Boot 的消息聚合

Message Aggregation using SQS and SpringBoot

我有一个用途 case/situation 其中,SQS(标准)将充斥着消息(超过 500k+),微服务(spring 基于启动)监听这些事件,使用它,并对第 3 方 SaaS 系统进行休息 API 调用 (batch-based)(已附上相同的 high-level 图)
这里的限制是 spring 引导使用者最多可以从 SQS 接收 10 条消息,转换有效负载,并使用这 10 条消息(记录)进行其余 API 调用。

有没有办法在进行其余 API 调用之前将这些消息聚合为 100 条消息(假设目标 SaaS 系统接受 100 条数据记录)?在这种情况下 spring 批处理会有帮助吗?

我是否应该针对这种需求查看不同的堆栈?非常感谢任何 help/guidance。

谢谢

也许您应该尝试 Spring 聚合器(Spring 集成)。

The Aggregator combines a group of related messages, by correlating and storing them until the group is deemed to be complete. At that point, the aggregator creates a single message by processing the whole group and sends the aggregated message as output.

https://docs.spring.io/spring-integration/reference/html/aggregator.html

请参考此 GitHub 存储库以 spring 与 AWS 服务集成 https://github.com/spring-projects/spring-integration-aws/tree/main/src/test/java/org/springframework/integration/aws

我假设您有多个应用程序实例,并且可以根据需要轻松扩展(因为您有 50 万条以上的消息)。但是,您的应用程序仍然容易丢失数据。因此,构建可靠的系统总是充满挑战。由于您已经在云端,也许您应该考虑使用不同的云服务。

我认为对于你的情况,你应该看看 AWS Kinesis dataStream 和 Kinesis data fire hose。 你可以参考这个, https://aws.amazon.com/blogs/big-data/stream-data-to-an-http-endpoint-with-amazon-kinesis-data-firehose/

你所描述的实际上是Spring批处理的面向块的处理模型:可以从队列中读取项目,以100个项目的块(即可配置的块大小)累积并发布以批量模式发送到您的 REST API。

Spring Batch 为您处理项目(以及更多)的分块。所以是的,尽管我有偏见,但我相信 Spring Batch 是您用例的一个很好的选择。