Поток Akka: использование очередей сохранения или источников событий

В потоковом приложении Akka, если приложение дает сбой/узел выходит из строя, я рискую потерять сообщения в процессе.

Что можно сделать, чтобы убедиться, что мы не теряем сообщения, и они воспроизводятся после возврата приложения.

В моем приложении mapAyns выполняет вызовы ввода-вывода и некоторые второстепенные задачи, связанные с процессором.

В чистом приложении Akka я выберу либо постоянные очереди, либо источник событий. Но в случае потока Akka, поскольку у меня нет доступа к базовым очередям, как я могу гарантировать, что ни одно сообщение внутри потока не будет потеряно?


person anindyaju99    schedule 12.12.2016    source источник


Ответы (1)


Вам нужно будет установить контрольную точку на приемнике потока, а затем возобновить источник на основе последней успешной контрольной точки в случае сбоя. Вы можете выполнить контрольную точку и возобновить работу, используя постоянную очередь или источник событий, как вы упомянули.

person easel    schedule 12.12.2016
comment
Таким образом, если мой источник не поддерживает воспроизведение, мне нужно будет создать его, в котором я извлеку данные из реального источника (скажем, Rabbit MQ или Kinesis) и отправлю их в постоянное хранилище! Мне также понадобится пользовательская логика при материализации потока, чтобы убедиться, что я сбрасываю свой источник на контрольную точку. Как я могу сделать это более общим и сказать, что я делаю каждую стадию в потоке максимальным усилием, выполненным один раз (я знаю, что максимальные усилия не сопровождаются однократным выполнением, но, вероятно, вы поняли идею)? - person anindyaju99; 13.12.2016
comment
Что ж, если ваш источник не является транзакционным, вам придется создавать транзакции так, как вы его урежете, верно? Если вы можете отложить либо блокировку чтения, либо как-то иным образом подтвердить его, то вы можете прочитать его с помощью потока, записать его в постоянный актор и разблокировать подтверждение только после того, как все это будет сделано. - person easel; 14.12.2016