我是一个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模式。它似乎比我最初想象的更尴尬。