java - Spring集成中的分组和忽略消息

标签 java spring spring-integration

我有一个 Spring 集成应用程序,用于处理数据库中的不同交易类型,我将其转换、过滤并路由到相应的 tradeEventChannel

新 RowId->[GateAway]---->|======|----->变压器->|======|------>过滤器->|======|--->路由器|======|--->repoTradeChannel

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

  1. 用户进行一笔开放 repo 交易,这会转化为一个 repo (开放消息)TradeEvent,应路由到repoTradeChannel进行处理。当交易被终止时(几小时、几天或几周后),将收到第二条消息(术语消息),并且也应该被处理
  2. 用户进行术语 repo 交易,这会转换为数据库中的两个 repo 协议(protocol)(开放和术语消息)TradeEvent。但是,只有一个应该路由到 repoTradeChannel 进行处理,因为第二个会导致问题。第二个几乎可以说是在 3 分钟内被接收到 channel 中。

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

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

是否有策略可以用来在聚合时处理这些情况,因为我无法停止传入消息和过滤器。我需要依靠分组,然后确定第二条消息在第二种情况下没有用。

实现会是什么样子?我应该使用不同的策略(例如缓存)吗?

总而言之,问题实际上是如何区分在情况 1 和情况 2 中收到的术语消息,其中情况 2 应该被抑制。

最佳答案

您的问题过于特定于业务,如果没有任何简单的通用解释或有关此事的代码,很难直接回答。

无论如何,您确实可以使用基于 idaction 字段的 correlationStrategy 聚合器。 releaseStrategy 应与 MessageCountReleaseStrategy 一样简单,且 threshold = 2

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

关于java - Spring集成中的分组和忽略消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52274450/

相关文章:

java - 创建 Spring MVC 应用程序

xml - 如何在 Spring MVC 中配置自定义 MediaType?

数组方法参数的 Spring 表达式语言 (SpEL)

java - Java XSLT 转换中 newTransformer 和 newTemplates 的区别

java - IProgressMonitor 如何暂停?

整个文件的 Java BufferedWriter 精度

java - 在 REST Web 服务内的请求/响应场景中使用 Kafka

spring-integration - Spring 集成 : "no output-channel or replyChannel header available"

error-handling - 错误处理 : Spring Integration

java - Java 泛型什么时候需要 <?扩展 T> 而不是 <T> 并且切换有什么缺点吗?