Есть система платежей.
Система отправляет платеж во внешнюю систему и периодически трекает статус.
Есть класс Transfer(перевод) с событиями SenderReject, SenderAccepted, SenderSent, ReceiverRecieved, ReceiverReject, ReceiverAccepted etc
Суть в том, что есть сервис который периодически получает по каждому переводу события и может получиться с момента последней проверки Перевод успел пройти 3 события.
То есть по сути получается Перевод идет по графу событий.
И надо в зависимости от вершины чтото сделать в системе.
Как это делать чтобы не получилось много макарон?
Здравствуйте, busk, Вы писали:
B>Есть система платежей. B>Система отправляет платеж во внешнюю систему и периодически трекает статус. B>Есть класс Transfer(перевод) с событиями SenderReject, SenderAccepted, SenderSent, ReceiverRecieved, ReceiverReject, ReceiverAccepted etc
B>Суть в том, что есть сервис который периодически получает по каждому переводу события и может получиться с момента последней проверки Перевод успел пройти 3 события. B>То есть по сути получается Перевод идет по графу событий.
Там еще может быть множество проблем — например, во время обработки одного события пришло еще одно по тому же переводу. Или порядок был нарушен. Или что-то еще.
Стоит смотреть в сторону акторных моделей с гарантиями. Я про обработку платежей в рамках платежной системы рассказывал на Highload++ и РИТ, можешь поискать доклады. Ну или вообще обратиться за консультациями )
Здравствуйте, busk, Вы писали:
B>Есть система платежей. B>Система отправляет платеж во внешнюю систему и периодически трекает статус. B>Есть класс Transfer(перевод) с событиями SenderReject, SenderAccepted, SenderSent, ReceiverRecieved, ReceiverReject, ReceiverAccepted etc
B>Суть в том, что есть сервис который периодически получает по каждому переводу события и может получиться с момента последней проверки Перевод успел пройти 3 события. B>То есть по сути получается Перевод идет по графу событий.
B>И надо в зависимости от вершины чтото сделать в системе. B>Как это делать чтобы не получилось много макарон?
Выбрать последнее событие, с нужным correllation id и вызвать сооотвествующий метод? Да миллион способов, банально начиная паттерна strategy.