Есть что-то вроде сервиса приложения (с++), или хост — процесса, подгружающего модули, которые образуют подобие акторной модели взаимодействия
в рамках одного процесса. Обмениваемые данные изначально поступают из внешней среды, например сеть, клиентом которой является каждый из модулей.
Дальнейший межмодульный транзит определен маршртизацией в зависимости от типа сообщения.
Один компонент — отдельный агент-поток со своим неким почтовым ящиком. При разработке системы возникла проблема потери сообщений в ряде случаев.
Это kill -9, отвалилась сеть, модуль нужно перезапустить, аварийное завршение и прочие причины, когда компонент завершит свое исполнние, не разобрав ящик.
Не мог бы кто-то посоветовать, что почитать, какте методики применяются. Какие-то моменты уяснил из документации для akka, но тем не менее. Ситуация усугубляется тем, что при отправке модулем во внешнюю среду сообщения буфферизируются в пачку по N (асинхронность).
У меня лично была мысль такая. Для каждого агента создать что — то вроде mpsc ring buffer на диске, в который отправители сохраняют данные перед передачей в ящик.
Агент при чтении с своего почтового ящика также должен будет вызвать pop() для кольца. Главное только обеспечить одинаковый порядок данных.
При рестарте после внештатной ситуации этот ring buffer разгребается.