使用Akka Persistence在每个Actor的基础上指定存储插件

时间:2015-03-18 15:13:39

标签: scala akka akka-persistence

是否可以手动将实例化的存储插件(用于日记和快照)提供给持久性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)

}

为我可能想要处理的每种类型编写配置是可行的,但是冗长而痛苦。

0 个答案:

没有答案