У нас есть приложение, скажем Application A
, которое выдвигает список задач на Application B
и одновременно делает запись в Кассандре.Схема Кассандры выглядит следующим образом: -
class Task{
@PrimaryKeyColumn(type=Partitioned)
String batchId;
@PrimaryKeyColumn(type=Clustered)
String taskId;
Boolean success;
String operation;
String error;
}
Теперь Application B
начинает обрабатывать каждую из этих задач и продолжает обновлять Application A
.Только после того, как все задачи в одном пакете достигают состояния успеха / сбоя.Нам нужно обновить Application C
Изначально мы думали о том, чтобы сохранить все данные в памяти и обновить статус, как только мы получим ответ, но это было слишком тяжело для кучи, а также, если служба выйдетсписок задач также теряется.
Если в Cassandra может быть способ перехватить поток событий или Cassandra уведомляет приложение каждый раз, когда происходит обновление какой-либо из этих записей, то мы можем использовать CountdownLatch
и в тот момент, когда обратный отсчет завершается, мы можем вызвать уведомление на Application C
.