我正在Akka Persistence使用Cluster Sharding。在PersistentActor
- s中提供依赖关系的正确方法是什么?
据我所知,传递它们作为构造函数参数是不可能的,因为Cluster Sharding正在创建这些actor。
使用Spring / Guice / etc。不是惯用的Scala(可能还有其他问题(?))。
使用object
来实现单例进行繁琐的测试并且看起来很糟糕。
什么是正确的方法?
P.S。如果您打算建议Cake模式,请在此特定的Akka Persistence Cluster Sharding上下文中提供示例代码。
答案 0 :(得分:0)
更新版本: 我之前提出的解决方案不允许在单元测试案例中模拟被测演员的服务。
我正在使用在该文章http://letitcrash.com/post/55958814293/akka-dependency-injection上提供的一种解决方案,称为"方面编织"这包括使用面向方面的编程在actor中注入依赖项。 此解决方案可用于在不受Spring容器控制的任何bean上注入Spring依赖项(可能对遗留代码有用)。
上述文章提供了一个完整的示例:https://github.com/huntc/akka-spring/blob/f137c98b621517301f636e6ea03519388fcd5fff/src/main/scala/org/typesafe/Akkaspring.scala
要在基于spring的应用程序中启用方面编织,您应该查看Spring doc上的文档 就我而言,在jetty应用程序服务器上,它包含使用spring代理并在jvm参数中设置它。
就测试而言,我:
ORIGINAL:
我在Spring应用程序中使用Akka来启用群集。首先 它提出了以下问题:你不能注入spring管理 正如你所说,actor构造函数中的依赖项。 (它试图 序列化应用程序上下文并失败)
所以我创建了一个包含应用程序上下文的类并提供了一个 用于检索我需要的bean的静态方法。我只检查豆子 需要它,这样:
public void onReceive{ if (message instanceof HandledMessage) { (MyService) SpringApplicationContext.getBean("myService"); ... } }
它不是常规的,但它能完成这项工作,你怎么看?希望 否则它可能会帮助另一个。