我有一个spring集成应用程序,该应用程序处理数据库中的不同交易类型,并对其进行转换,过滤和路由至相应的tradeEventChannel
New RowId->[GateAway]---->|======|----->Transformer->|======|------>Filter->|======|--->Router|======|--->repoTradeChannel
对于一种特定的贸易事件类型(repoTradeChannel),有两种可能的情况:
TradeEvent
,应将其路由到repoTradeChannel
进行处理。当交易被命名为(数小时,数天或数周之后)时,会收到第二条消息(术语“消息”),并且还应进行处理。 TradeEvent
。但是,只有一个路由应该路由到repoTradeChannel
进行处理,因为第二个路由会引起问题。第二个接收到的频道几乎可以说在3分钟之内。 在以上两种情况下,TradeEvent
/ message
都可以按id
和TradeEvent
类的其他属性进行分组。
我的问题是,我可以使用aggregator
对第二种情况下出现的消息进行分组,而忽略第二种情况吗?我可以查看例如id
或action
字段来确定哪个不可接受。在第二种情况下,消息/事件会在几分钟内收到,而在第一种情况下,第二条消息(术语消息)可能会延迟,数小时,数天或数周。
有没有我可以使用的策略来处理这些情况,因为我无法停止传入的消息并进行过滤。我需要依靠分组,然后确定第二种消息在第二种情况下没有用。
实现会是什么样子?我应该使用诸如缓存之类的其他策略吗?
总而言之,问题实际上是我如何区分在情况1与情况2之间收到的 term消息,在这种情况下,情况2应该被抑制。
答案 0 :(得分:0)
您的问题过于针对特定业务,如果没有任何明确的普通解释或相关代码,很难直接回答。
无论如何,您实际上都可以基于correlationStrategy
或id
字段将聚合器与action
一起使用。 releaseStrategy
应该和MessageCountReleaseStrategy
一样简单threshold = 2
。
您可以在MessageGroupProcessor
实现中决定从聚合器输出什么:您可以将两条消息合并为一条消息。您仍然可以生成它们的列表,或者只是忽略其中一条消息,而仅生成另一条消息。