반응형
스칼라의 Akka, 느낌표 및 물음표
Actors에게 메시지를 보낼 때 느낌표 ( !)와 물음표 ( ) 의 차이점은 무엇입니까 ??
myActor ! Hello(value1)
myActor ? Hello(value1)
뻔뻔 스럽게 복사 된 [멋진] 공식 문서 ( 자세한 내용은 메시지 보내기 섹션 참조) :
메시지는 다음 방법 중 하나를 통해 액터에게 전송됩니다.
!예를 들어 메시지를 비동기 적으로 보내고 즉시 반환하는 것과 같은 "실행 후 잊어 버림"을 의미합니다. 라고도합니다tell.
?비동기 적으로 메시지를 보내고Future가능한 응답을 나타내는를 반환합니다 . 라고도합니다ask.
보기의받는 사람의 관점에서, 그것은보고 tell와 ask같은 방법으로 메시지를 표시합니다. 그러나 tell의 값을 수신 할 때 sender메시지를 보낸 액터의 참조가되는 반면 ask,의 경우 요청을 한 액터 sender에서 Future생성 된 모든 응답이 전달되도록 설정됩니다 .
ask에서는받은 응답이 요청한 메시지의 결과임을 쉽게 알 수있는 반면, Tell에서는 유사한 결과를 얻으려면 고유 한 ID를 사용해야 할 수 있다는 장점 이 있습니다. 그러나와 ask당신은 설정해야합니다 timeout(가) 후 Future응답이 수신되지 않으면 오류가 발생합니다.
아래 코드에서 a tell및 및를 사용하여 동일한 효과를 얻습니다 ask.
import akka.actor.{Props, Actor}
import scala.concurrent.duration._
import akka.pattern.ask
class TellActor extends Actor {
val recipient = context.actorOf(Props[ReceiveActor])
def receive = {
case "Start" =>
recipient ! "Hello" // equivalent to recipient.tell("hello", self)
case reply => println(reply)
}
}
class AskActor extends Actor {
val recipient = context.actorOf(Props[ReceiveActor])
def receive = {
case "Start" =>
implicit val timeout = 3 seconds
val replyF = recipient ? "Hello" // equivalent to recipient.ask("Hello")
replyF.onSuccess{
case reply => println(reply)
}
}
}
class ReceiveActor extends Actor {
def receive = {
case "Hello" => sender ! "And Hello to you!"
}
}
참고URL : https://stackoverflow.com/questions/17644273/akka-in-scala-exclamation-mark-and-question-mark
반응형
'IT TIP' 카테고리의 다른 글
| MVC Razor 마크 업에서 쿼리 문자열 매개 변수를 가져 오는 방법은 무엇입니까? (0) | 2020.11.23 |
|---|---|
| 양식을 원래 상태로 재설정 (AngularJS 1.0.x) (0) | 2020.11.23 |
| 높이 : 100 % (0) | 2020.11.23 |
| ActiveMQ 대 Apollo 대 Kafka (0) | 2020.11.23 |
| SQL 케이스 표현식 구문? (0) | 2020.11.23 |