是否可以为持久参与者手动实例化存储插件(用于日志和快照)?(而不是引用那些通过配置硬编码的那些。)换句话说,而不是覆盖日志和快照插件ID。如手册中的多个持久性插件配置所述,我想这样做:
trait ActorWithOverridePlugins extends PersistentActor {
override def persistenceId = "123"
/* Not real. */
override def journalPlugin = new JournalPlugin()
/* Not real. */
override def snapshotPlugin = new SnapshotPlugin()
}
为了简要解释我的用例,我想编写一个可参数化的插件,它将透明地存储案例类。它将使用适用于任何特定持久性参与者可能处理的案例类的任何读取和写入(来自 Play 框架的 JSON 库)的实现来实例化。
基于前面的示例,它可能看起来像这样(为了清楚起见,使用显式类型):
case class Event(timestamp:Long, message:String)
val format:Format[Event] = Json.format[Event]
trait EventsActor extends PersistentActor {
override def persistenceId = "events"
/* Not real. Also, should be a singleton. */
override def journalPlugin = new HypotheticalJournalPlugin[Event](format)
/* Not real. Also, should be a singleton. */
override def snapshotPlugin = new HypotheticalSnapshotPlugin[Event](format)
}
为我可能想要处理的每种类型编写配置是可行的,但冗长且痛苦。