введение Akka.Persistence в блоге Petabridge дает понять, что вы не можете иметь несколько акторов с одним и тем же PersistenceId:
Поле
PersistenceId
важно — оно однозначно идентифицирует объект, сохраняющий свое состояние с помощью Akka.Persistence, и в любой момент времени для одногоPersistenceId
должен быть ровно один постоянный действующий субъект.[...] так что представьте, что у вас есть два актера с одним и тем же PersistenceId, но разными порядковыми номерами, записывающими в одно и то же хранилище. Это будет хаос и неизбежные ошибки — поэтому крайне важно, чтобы каждый PersistenceId был глобально уникальным в вашей системе ActorSystem (по крайней мере, для всех акторов, пишущих в это хранилище).
Я могу придумать сценарий, в котором у вас будет два отдельных актора: один, который заботится о сохранении состояния персистентности в базе данных (т. е. вызывает Persist()
), а другой воспроизводит сообщения из журнала, когда это запрашивается вручную (т. е. вызывает Recover()
). . Операции чтения и записи будут выполняться разными субъектами. Только один когда-либо пишет, и только один когда-либо читает. Однако обоим нужен один и тот же PersistenceId.
Я считаю, что в этом сценарии должно быть безопасно, чтобы два субъекта использовали один и тот же PersistenceId. Но, учитывая приведенные выше предупреждения, есть ли причина, по которой такой подход может быть опасен на практике?