Akka 2.1最小远程actor示例 [英] Akka 2.1 minimal remote actor example
问题描述
编辑注意,我需要对此 https://github.com/akka/akka/commit/ce014ece3568938b2036c4ccfd21b92faba69607#L13L6 使可接受的答案与AKKA 2.1一起使用,这是akkas主页上的稳定发行版!
EDIT Notice, I needed to make the reverse changes of this https://github.com/akka/akka/commit/ce014ece3568938b2036c4ccfd21b92faba69607#L13L6 to make the accepted answer work with AKKA 2.1 which is the stable distribution found on akkas homepage!
我已经阅读了在AKKA上可以找到的所有教程,但是没有发现开箱即用。
I have read all the tutorials I could find on AKKA, but nothing I found works "out of box".
使用日食,我想创建2个程序。
Using eclipse, I want to create 2 programs.
Program1:
启动演员 joe,并以某种方式使其在127.0.0.1上可用:some_port
Program1: starts actor "joe" and somehow makes it available on 127.0.0.1:some_port
程序2:
在127.0.0.1:some_port引用演员 joe。向 joe发送问候消息。
Program2: gets a reference to actor "joe" at 127.0.0.1:some_port. Sends a hello message to "joe".
程序1在收到消息时应打印一些内容。我想使用AKKA 2.1在Eclipse中运行此示例。有人可以列出2个程序(program1和program2)以及一个可以正常工作的application.conf文件吗?
Program 1 should print something when the message is received. I want to run this example in eclipse using AKKA 2.1. Can someone list 2 programs, (program1 and program2) together with a working application.conf file that does this and nothing else?
edit>
让我告诉您到目前为止我得到了什么:
edit> let me show you what I got so far:
演员
case class Greeting(who: String) extends Serializable
class GreetingActor extends Actor with ActorLogging {
def receive = {
case Greeting(who) ⇒ println("Hello " + who);log.info("Hello " + who)
}
}
程序1 :
package test
import akka.actor.ActorSystem
object Machine1 {
def main(args: Array[String]): Unit = {
val system = ActorSystem("MySystem")
}
}
Program2
package test
import akka.actor.ActorSystem
import akka.actor.Props
import akka.actor.actorRef2Scala
object Machine2 {
def main(args: Array[String]): Unit = {
val system = ActorSystem("MySystem")
val greeter = system.actorOf(Props[GreetingActor], name = "greeter")
greeter ! Greeting("Felix")
}
}
应用程序。 conf
akka {
actor {
deployment {
/greeter {
remote = "akka://MySystem@127.0.0.1:2553"
}
}
}
}
但是,当我仅启动Program2时,此程序有效,并且输出:
However, this program works when I start only Program2 and it outputs:
Hello Felix
[INFO] [02/18/2013 12:27:29.999] [MySystem-akka.actor.default-dispatcher-2] [akka://MySystem/user/greeter] Hello Felix
似乎没有拿起我的application.conf。我尝试将其放置在eclipse项目的./src/和./文件夹中。没有不同。另外,我知道这确实是降级部署,但是我只需要一个hello world程序即可使用AKKA。我花了很多时间而没有得到一个简单的工作应用程序。
It seems that it is not picking up my application.conf. I tried placing it both in the ./src/ and ./ folder of my eclipse project. No difference. Also, I know this is really demote deployment, but I need just a hello world program to work using AKKA. I spent so much time on this without getting a simple working application.
推荐答案
正如korefn所述,远程文档详细说明了其工作原理。它还链接到示例应用程序。该示例将为您提供入门所需的一切。
As korefn mentioned, the remote documentation explains it's workings in detail. It also links to an example application. That example should give you everything you need to get started.
要使示例应用程序运行,请执行以下步骤:
To get the sample application running perform the following steps:
从GitHub克隆
eecolor@BLACK:~/GihHub$ git clone https://github.com/akka/akka.git
进入 akka
目录并运行 sbt
eecolor@BLACK:~/GihHub/akka$ sbt
切换到 akka-sample-project
akka > project akka-sample-remote
调用 run
在项目上,选择 CalcApp
Multiple main classes detected, select one to run:
[1] sample.remote.calculator.java.JCreationApp
[2] sample.remote.calculator.LookupApp
[3] sample.remote.calculator.CalcApp
[4] sample.remote.calculator.java.JLookupApp
[5] sample.remote.calculator.CreationApp
[6] sample.remote.calculator.java.JCalcApp
Enter number: 3
[info] Running sample.remote.calculator.CalcApp
[INFO] [02/19/2013 19:22:09.055] [run-main] [Remoting] Starting remoting
[INFO] [02/19/2013 19:22:09.230] [run-main] [Remoting] Remoting started; listening on addresses :[akka.tcp://CalculatorApplication@127.0.0.1:2552]
Started Calculator Application - waiting for messages
切换到另一个控制台并重复前几个步骤
Switch to another console and repeat the first few steps
eecolor@BLACK:~/GihHub/akka$ sbt
akka > project akka-sample-remote
调用 run
并选择 LookupApp
akka-sample-remote > run
Multiple main classes detected, select one to run:
[1] sample.remote.calculator.java.JCreationApp
[2] sample.remote.calculator.LookupApp
[3] sample.remote.calculator.CalcApp
[4] sample.remote.calculator.java.JLookupApp
[5] sample.remote.calculator.CreationApp
[6] sample.remote.calculator.java.JCalcApp
Enter number: 2
[info] Running sample.remote.calculator.LookupApp
[INFO] [02/19/2013 19:23:39.358] [run-main] [Remoting] Starting remoting
[INFO] [02/19/2013 19:23:39.564] [run-main] [Remoting] Remoting started; listening on addresses :[akka.tcp://LookupApplication@127.0.0.1:2553]
Started Lookup Application
Sub result: 14 - 16 = -2
Sub result: 13 - 22 = -9
Add result: 56 + 93 = 149
Add result: 18 + 19 = 37
切换回另一个控制台,您应该看到类似这样的内容:
Switch back to the other console and you should see something like this:
Calculating 14 - 16
Calculating 13 - 22
Calculating 56 + 93
Calculating 18 + 19
这篇关于Akka 2.1最小远程actor示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!