Я читал, что общение актеров при локальном запуске происходит в памяти. Таким образом, не учитывая ошибки нехватки памяти, есть ли другой (желательно воспроизводимый) сценарий, в котором сообщения фактически теряются?
Таким образом, обычно доставка в память выполняется, но вы также указали, что говорите о функции «доставки как минимум один раз». А в документах (https://doc.akka.io/docs/akka/current/persistence.html#at-least-once-delivery) конкретно говорится о том, как хотя бы один раз сильно меняется нормальное поведение. В частности, хотя бы один раз используется постоянство для отслеживания того, что было отправлено и что было подтверждено.
Итак, когда вы используете хотя бы один раз, при отправке сообщения должен произойти целый танец. Сначала сообщение должно быть сохранено таким образом, чтобы в случае сбоя отправляющего субъекта эта работа могла возобновиться в другом месте. Во-вторых, сообщение должно быть отправлено. В-третьих, любой ответ должен быть соотнесен с отправленным сообщением, а получение должно быть сохранено, чтобы в случае сбоя субъекта после этого момента возобновляющий субъект знал, что сообщение не нужно повторять.
Из-за этого не должно быть случаев, когда сообщение теряется. Даже когда JVM потеряна. (Даже когда все JVM потеряны.) В конце концов, это точка «по крайней мере, один раз», что сообщение гарантированно будет доставлено (и получено ответ). Тем не менее, обратите внимание, что это идет с компромиссами. (См. Документацию по компромиссам, хотя один очевидный из них - производительность.)