如何使用另一种语言(python)的基于scala actor的事件采购应用程序

时间:2015-09-02 10:41:44

标签: scala akka zeromq

虽然我知道演员模特是什么(这个想法看起来很简单),但我对scala有点熟悉并且不熟悉akka。

所以,现在让我们说这是我的代码(实际上我需要的是事件采购应用程序)。我需要能够使用任何语言,而不仅仅是JVM。

所以当然我用Google搜索了一下,我发现了this。问题是,如果我的理解是正确的,我需要为zmq消息创建一些自定义协议,反序列化和调度,这是完全不酷的。也许已经存在解决方案了吗?如果不是,那么如何以最有效的方式做到这一点?也许我需要创建一些消息案例类和类似门面演员的东西来进行反序列化?

class HelloActor extends Actor {
  def receive = {
    case "hello" => println("well, helllo!")
    case _ => println("huh?")
  }
}

object Main extends App {
  val system = ActorSystem("HelloSystem")
  val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")
  helloActor ! "hello"
  helloActor ! "buenos dias"
}

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,取决于您使用的协议等。对于特定语言的方式,您可以使用Pyro。就像java一样,你可以在python中序列化通用对象,然后通过网络传输它们,你可以使用Pyro。您可以利用python在jvm(Jython)和本机上实现的事实。不确定在scala和python中编写这个是一个好主意,我会在java中创建API,然后将其添加到scala类路径,然后任何其他JVM语言也可以使用您的API。此外,将jython与java一起使用更为常见,因此大多数人都有其他好处。

但是,jvm和python理解的通用语言将是这些序列化的python对象。所以你需要知道的是:

  • 如何在java中使用jython
  • 如何使用pyro

使用scala和jython只是将jar添加到类路径中,你可能已经知道了。

编辑:好的我想我可能没有让这个方法足够清晰。所以基本上: JVM使用jython创建一个jython实例,该实例被发送到远程python对象。通过Pyro模块完成通信。这个程序也可以发送序列化的python对象。

这是java中远程actor的正常情况,除了消息正在实现Serializable。 Python和Java不在同一个进程中,或使用本机方法或类似的东西。它们可以在同一台机器或不同的机器上。此方法不是特定于平台的。

希望这种方法对某人有用。

答案 1 :(得分:0)

在我看来,Akka演员解决方案有点矫枉过正,所以我最终在这个开源项目中实现了我自己的事件采购解决方案。

持久层是开发人员的决定,但我提供了使用couchbase执行的实际示例。

看看您认为有用的情况。

https://github.com/politrons/Scalaydrated