英文:
Spring Integration - ReleaseStrategy that looks at messages that weren't yet added
问题
我有一些以组的形式获取到系统中的消息(假设每组有50条),需要按照AGGREGATION_ID进行分组,形成消息列表,并将其进一步发送到流程中。
我可以使用correlationStrategy根据该ID进行聚合,但我需要知道何时释放聚合后的消息。在ReleaseStrategy中,我只能查看已添加到聚合中的消息,但我需要知道在获取到的50条消息组中没有更多具有相同AGGREGATION_ID的消息时,何时发送该组。我该如何做到这一点?
英文:
I have messages that are fetched to the system in groups (let's say 50), need to be grouped by AGGREGATION_ID into lists of messages and send further into the flow.
I can use correlationStrategy to aggregate with that id, but I need to know when to release the aggregated message. In ReleaseStrategy I can only look at the messages already added to the aggregate, but I need to know when there's no more messages in the fetched group of 50 with the same AGGREGATION_ID to know when to send the group. How can I do that?
答案1
得分: 2
一个ReleaseStrategy
可以是任何具有对整个应用程序上下文完全访问权限的bean。如果您有一些地方在聚合之前存储这些消息,您肯定可以从自定义的ReleaseStrategy
实现中查看该位置。
另一方面,我建议您查看聚合器的groupTimeout
选项:https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/message-routing.html#agg-and-group-to。因此,根据正常行为,您的组将根据预期的大小50
进行聚合,但是当一段时间内没有新的组消息时,组将以迄今为止的任何内容释放。您还可以将groupTimeout
配置为SpEL表达式,因此也可以访问应用程序上下文。
英文:
A ReleaseStrategy
could be any bean with a full access to the whole application context. If you have some place where you store those messages before aggregation, you definitely can take a look into that place from a custom ReleaseStrategy
implementation.
On the other hand I would suggest to take a look into the groupTimeout
option of an aggregator: https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/message-routing.html#agg-and-group-to. So, with the normal behavior your groups are going to be gathered according an expected size of 50
, but when there is no new messages for the group during some time, a group is going to be released with whatever is there so far. You also can configure that groupTimeout
as a SpEL expression, so there is an access to application context, too.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论