在JRuby中使用Akka 2.3.8的示例 - 特别是使用Java :: AkkaActor :: Props

时间:2015-01-11 15:56:04

标签: scala akka jruby

我是一个Ruby开发人员,而不是Java开发人员,所以我试图找到使用JRuby的Scala Akka库的最新例子,但是很短。

我已经准备好以下代码......

  require "java"

  [
    "akka-2.3.8/lib/scala-library-2.11.4.jar",
    "akka-2.3.8/lib/akka/akka-actor_2.11-2.3.8.jar",
    "akka-2.3.8/lib/akka/config-1.2.1.jar"
  ].each { |lib| $CLASSPATH << lib }

  java_import java.lang.System
  java_import "java.io.Serializable"
  java_import "akka.actor.ActorRef"
  java_import "akka.actor.ActorSystem"
  java_import "akka.actor.Props"
  java_import "akka.actor.UntypedActor"

  class Greeting
    include Serializable

    attr_reader :who

    def initialize(who)
      @who = who
    end
  end

  class GreetingActor < UntypedActor
    class << self
      alias_method :apply, :new
      alias_method :create, :new
    end

    def onReceive(message)
      puts "Hello " + message.who
    end
  end

  system  = ActorSystem.create("GreetingSystem") # <Java::AkkaActor::ActorSystemImpl:0x68c9133c>
  props   = Props.new(GreetingActor) # Java::AkkaActor::Props
  greeter = system.actorOf(props, "greeter");
  greeter.tell(Greeting.new("Rocky Jaiswal"));

  system.shutdown
  system.await_termination

...但这会导致以下错误......

ArgumentError: wrong number of arguments (1 for 3)
  (root) at size.rb:39

此错误是由Props.new(GreetingActor)引起的,但是阅读Akka的文档并不清楚如何将该代码转换为Ruby。

有谁知道如何解决此问题?看http://doc.akka.io/api/akka/2.3.1/index.html#akka.actor.Props我无法看到它如何与Ruby代码相关/映射。

我知道Celluloid ruby​​库,但我想看看如何使用更低级别的代码实现Actor模式。它似乎比我最初想象的更尴尬。

0 个答案:

没有答案