在Spring集成中对消息进行分组和忽略

时间:2018-09-11 11:03:58

标签: java spring spring-integration

我有一个spring集成应用程序,该应用程序处理数据库中的不同交易类型,并对其进行转换,过滤和路由至相应的tradeEventChannel

New RowId->[GateAway]---->|======|----->Transformer->|======|------>Filter->|======|--->Router|======|--->repoTradeChannel

对于一种特定的贸易事件类型(repoTradeChannel),有两种可能的情况:

  1. 用户进行一次开放回购交易,这转换为一个回购(开放消息)TradeEvent,应将其路由到repoTradeChannel进行处理。当交易被命名为(数小时,数天或数周之后)时,会收到第二条消息(术语“消息”),并且还应进行处理
  2. 用户交易一个条款回购交易,这将转换为数据库中的两个回购交易(打开和条款消息)TradeEvent。但是,只有一个路由应该路由到repoTradeChannel进行处理,因为第二个路由会引起问题。第二个接收到的频道几乎可以说在3分钟之内。

在以上两种情况下,TradeEvent / message都可以按idTradeEvent类的其他属性进行分组。

我的问题是,我可以使用aggregator对第二种情况下出现的消息进行分组,而忽略第二种情况吗?我可以查看例如idaction字段来确定哪个不可接受。在第二种情况下,消息/事件会在几分钟内收到,而在第一种情况下,第二条消息(术语消息)可能会延迟,数小时,数天或数周。

有没有我可以使用的策略来处理这些情况,因为我无法停止传入的消息并进行过滤。我需要依靠分组,然后确定第二种消息在第二种情况下没有用。

实现会是什么样子?我应该使用诸如缓存之类的其他策略吗?

总而言之,问题实际上是我如何区分在情况1与情况2之间收到的 term消息,在这种情况下,情况2应该被抑制。

1 个答案:

答案 0 :(得分:0)

您的问题过于针对特定业务,如果没有任何明确的普通解释或相关代码,很难直接回答。

无论如何,您实际上都可以基于correlationStrategyid字段将聚合器与action一起使用。 releaseStrategy应该和MessageCountReleaseStrategy一样简单threshold = 2

您可以在MessageGroupProcessor实现中决定从聚合器输出什么:您可以将两条消息合并为一条消息。您仍然可以生成它们的列表,或者只是忽略其中一条消息,而仅生成另一条消息。