我正在尝试将Akka HTTP与Actors连接起来。我有一个简单的演员收到“你好”并发回“Hello world”
class TestActor extends Actor{
def receive={
case "hello"=>{
sender!"Hello World"
}
}
}
我定义了以下路线:
object Main extends App{
val route1: Route =
get {
path("hello") {
complete {
"This is hello"
}
}
}
implicit val materializer = ActorMaterializer()
implicit val system = ActorSystem("h")
Http().bindAndHandle(route1, "localhost", 8185)
}
我想在URL中访问/ hello时向TestActor发送一条tell消息,并显示消息“Hello World”作为响应。我怎么能这样做?
答案 0 :(得分:1)
步骤1 - 创建Actor实例。
第2步 - 获取对它的引用。
第3步 - 发送消息
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("var evt = document.createEvent('MouseEvents');" + "evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0,null);" + "arguments[0].dispatchEvent(evt);", webElement);
现在......
class TestActor extends Actor{
def receive = {
case "hello" => {
sender() ! "Hello World"
}
}
}
object TestActor {
def props: Props = Props(classOf[TestActor])
}
答案 1 :(得分:1)
您有两种选择。选项1是使用“询问”模式。你可以像下面一样“问”演员。 “Ask”返回您可以映射并执行其他操作的未来。您也可以在将来完成请求。这里需要注意的是它需要超时。您必须配置超时才能使其工作,这可能会在较大的项目中保持繁琐。
catchFn
选项2是使用“Tell”模式。这比“问”模式更受欢迎。你可以阅读这个here。您需要将请求上下文传递给新actor并使用该新actor完成请求。你会做类似下面的事情。
implicit val timeout: Timeout = 2 seconds
val responseFuture = (actor ? message).mapTo[String] // This will return a Future[String]
complete(responseFuture)