使用 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 是您用例的一个很好的选择。
我有一个用途 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 是您用例的一个很好的选择。