У меня есть приложение весенней интеграции, которое работает с различными типами сделок в базе данных, которые я преобразую, фильтрую и направляю в соответствующие им значения. tradeEventChannel
New RowId->[GateAway]---->|======|----->Transformer->|======|------>Filter->|======|--->Router|======|--->repoTradeChannel
Для одного конкретноготип торгового события (repoTradeChannel), возможны два случая:
- пользователь торгует открытая сделка репо, это переводится в одно репо (открытое сообщение)
TradeEvent
, которое должно бытьнаправляется на repoTradeChannel
для обработки.Когда сделка называется (часы, дни или недели спустя), получено второе сообщение (термин сообщение), и также следует обработать . - пользователь торгует термин сделка репо, это переводится в два репо в базе данных (открытое и терминальное сообщение)
TradeEvent
.Однако только один должен быть перенаправлен на repoTradeChannel
для обработки, так как второй вызывает проблемы.Второй поступает в канал почти, скажем, за 3 минуты.
В обоих вышеупомянутых случаях TradeEvent
/ message
можно сгруппировать по id
и другим свойствам в классе TradeEvent
.
Мой вопрос: могу ли я использовать aggregator
для группировки сообщений, которые поступают во втором случае, и игнорировать второй?Я могу посмотреть, например, поля id
или action
, чтобы определить, какие из них недопустимы.Во втором случае сообщение / событие принимается в течение нескольких минут, тогда как в первом случае второе сообщение (термин-сообщение) может быть отложено, часы, дни или недели.
Существует ли стратегия, которую я могу использовать для обработки этих случаев при агрегировании, поскольку я не могу остановить входящие сообщения и отфильтровать их.Мне нужно полагаться на группировку, а затем определить, что второе сообщение бесполезно во втором случае.
как будет выглядеть реализация?Должен ли я использовать другую стратегию, например, кэширование?
Таким образом, проблема заключается в том, как на самом деле я могу отличить термин сообщение , полученное в случае 1 от случая 2, где случай 2 следует исключить.