2011-09-13 5 views
3

나는 akka 배우에게 stdin으로부터 메시지를받을 수 있는지 (그리고 어떻게 할 수 있는지) 알고 싶다. 본질적으로, 아이디어는 입력의 모든 라인이 행위자에게 메시지로 보내질 것입니다. stdin에서 배우 메시지를받는 방법?

> myprogram 
DO X 
DO Y 
... 

다음 배우가 메시지를 수신해야하는

이 할 수있는 표준 용액이 있는가 등, "Y는 DO" "X는 DO"? (

spawn { 
    while(in.available) { 
     actor ! in.readLine 
    } 
} 

을하지만 그때 나는 두 배우 (또는 배우 기반 작업 한 배우)가 거라고 내가 IO를 차단하여 것입니다 :

나는 하나 개의 방법이 작업을 수행하는 것 같아요 그건 그렇고 배우와도 안전합니까?) ... 또한, 스폰 블록을 제어하는 ​​것이 더 힘들어집니다 (예 : 작업을 죽이는 것). 당신이 날 수있는 경우 OP

에서

추가 된 더 따라 업 나는 성능 즉 CamelServiceManager을한다 (이 솔루션을 사용하여이 공격

  1. 인가 ..., 몇 후속 업이 HTTP 서버 등)?

  2. 초보자를위한 훌륭한 자습서가 있습니까? 나는 공식 Akka 문서에서 Camel을 읽기 시작했으나, 현재 가지고있는 것보다 Camel에 대한 더 많은 지식을 가진 것으로 보인다. 예를 들어, 사용자 정의 java.io.InputStreamendpointUri으로 사용하는 방법을 파악할 수 없습니다.

답변

5

당신은 배우가 표준 입력에서 메시지를받을 수 있도록하기 위해 camel-stream 구성 요소와 함께 akka-camel을 사용할 수 있습니다. 다음은 작업 예입니다

import akka.actor.Actor 
import akka.camel.{Message, CamelServiceManager, Consumer} 

object Example extends App { 
    CamelServiceManager.startCamelService 
    Actor.actorOf[ExampleConsumer].start 
} 

class ExampleConsumer extends Actor with Consumer { 
    def endpointUri = "stream:in" 
    def receive = { 
    case msg: Message => println("received %s" format msg.bodyAs[String]) 
    } 
} 

업데이트 : 후속 질문

답변
  • CamelServiceManager.startCamelService 방법은 새로 CamelContext에서 Consumer 배우 엔드 포인트를 시작 레지스터 CamelContext 두 Akka 배우를 시작합니다. HTTP 서버가 시작되지 않았습니다.
  • Apache Camel에 대한 소개는 Apache Camel: Integration Nirvana 문서이며 도서의 chapter 1입니다. Camel in Action의 Appendix E은 akka-camel을 소개합니다.
  • 끝점 URI에 맞춤 InputStream을 설정하는 것은 현재 낙타 스트림 구성 요소로는 불가능합니다.
관련 문제