группировка и игнорирование сообщений в весенней интеграции - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть приложение весенней интеграции, которое работает с различными типами сделок в базе данных, которые я преобразую, фильтрую и направляю в соответствующие им значения. tradeEventChannel

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

Для одного конкретноготип торгового события (repoTradeChannel), возможны два случая:

  1. пользователь торгует открытая сделка репо, это переводится в одно репо (открытое сообщение) TradeEvent, которое должно бытьнаправляется на repoTradeChannel для обработки.Когда сделка называется (часы, дни или недели спустя), получено второе сообщение (термин сообщение), и также следует обработать .
  2. пользователь торгует термин сделка репо, это переводится в два репо в базе данных (открытое и терминальное сообщение) TradeEvent.Однако только один должен быть перенаправлен на repoTradeChannel для обработки, так как второй вызывает проблемы.Второй поступает в канал почти, скажем, за 3 минуты.

В обоих вышеупомянутых случаях TradeEvent / message можно сгруппировать по id и другим свойствам в классе TradeEvent.

Мой вопрос: могу ли я использовать aggregator для группировки сообщений, которые поступают во втором случае, и игнорировать второй?Я могу посмотреть, например, поля id или action, чтобы определить, какие из них недопустимы.Во втором случае сообщение / событие принимается в течение нескольких минут, тогда как в первом случае второе сообщение (термин-сообщение) может быть отложено, часы, дни или недели.

Существует ли стратегия, которую я могу использовать для обработки этих случаев при агрегировании, поскольку я не могу остановить входящие сообщения и отфильтровать их.Мне нужно полагаться на группировку, а затем определить, что второе сообщение бесполезно во втором случае.

как будет выглядеть реализация?Должен ли я использовать другую стратегию, например, кэширование?

Таким образом, проблема заключается в том, как на самом деле я могу отличить термин сообщение , полученное в случае 1 от случая 2, где случай 2 следует исключить.

1 Ответ

0 голосов
/ 11 сентября 2018

Ваш вопрос слишком специфичен для бизнеса, и на него трудно ответить напрямую, без какого-либо простого общего объяснения или кода по данному вопросу.

В любом случае, вы действительно можете использовать агрегатор с correlationStrategy на основе этих полей id или action. releaseStrategy должно быть таким же простым, как MessageCountReleaseStrategy с threshold = 2.

Что выводить из агрегатора, вы можете решить в реализации MessageGroupProcessor: вы можете объединить оба сообщения в одно. Вы все еще можете создать их список или просто проигнорировать одно из сообщений и создать только другое.

...