是否可以手动将实例化的存储插件(用于日记和快照)提供给持久性actor? (而不是引用那些通过配置进行硬编码的内容。)换句话说,我不想override journal and snapshot plugin ids. as described by Multiple persistence plugin configurations from the manual,而是希望这样做:
trait ActorWithOverridePlugins extends PersistentActor {
override def persistenceId = "123"
/* Not real. */
override def journalPlugin = new JournalPlugin()
/* Not real. */
override def snapshotPlugin = new SnapshotPlugin()
}
为了简要解释我的用例,我想编写一个可以透明地存储案例类的可参数化插件。它将通过任何读取和写入(来自Play Framework的JSON库)的实现来实例化,适用于任何特定持久化actor可能处理的案例类。
在前面的示例的基础上,它可能看起来像这样(为清晰起见,显式类型):
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)
}
为我可能想要处理的每种类型编写配置是可行的,但是冗长而痛苦。