2012-12-04 4 views
0

Questuion

를받을 수 없습니다.Akka - zeromq 소켓/배우 내가 akka-zeromq를 사용하여 zeromq에서 메시지를 수신하는 간단한 배우를 구현하기 위해 노력하고있어 메시지

import akka.actor._ 
import akka.zeromq._ 

class PullActor extends Actor { 
    def receive = { 
    case x => println("M: " + x.toString) 
    } 
} 

object Main extends App { 
    val system = ActorSystem("system") 

    val pullActor = system.actorOf(Props[PullActor], "pull-actor") 

    val pullSocket = ZeroMQExtension(system).newSocket(
    SocketType.Pull, Listener(pullActor), Connect("tcp://127.0.0.1:8008")) 

    println("Press ENTER to exit") 
    Console.readLine() 
    system.shutdown() 
} 

시스템 인쇄 단지

M: Connecting 

추가 정보

메시지를 보내는 것은 내가 눈치 다른 이상한 것은이 때문이다

import zmq 
ctx = zmq.Context() 
p = ctx.socket(zmq.PUSH) 
p.bind("tcp://*:8008") 
p.send("test") 

간단한 파이썬을 통해 이루어집니다 언제나 누르면 프로그램이 종료되지 않습니다. 파이썬 스크립트를 사용하여 메시지를 보내면됩니다. 여기에 전체 출력 :

[DEBUG] [12/04/2012 18:01:45.175] [main] [EventStream(akka://system)] logger log1-Logging$DefaultLogger started 
[DEBUG] [12/04/2012 18:01:45.178] [main] [EventStream(akka://system)] Default Loggers started 
Press ENTER to exit 
M: Connecting 

[DEBUG] [12/04/2012 18:01:54.176] [system-akka.actor.default-dispatcher-2] [EventStream] shutting down: StandardOutLogger started 
[DEBUG] [12/04/2012 18:01:54.176] [system-akka.actor.default-dispatcher-2] [EventStream] shutting down: StandardOutLogger started 
[DEBUG] [12/04/2012 18:01:54.179] [system-akka.actor.default-dispatcher-2] [EventStream] all default loggers stopped 

scalaVersion := "2.10.0-RC3" 

libraryDependencies ++= Seq(
    "com.typesafe.akka" %% "akka-actor" % "2.1.0-RC3" cross CrossVersion.full, 
    "com.typesafe.akka" %% "akka-zeromq" % "2.1.0-RC3" cross CrossVersion.full, 
    "com.typesafe.akka" %% "akka-slf4j" % "2.1.0-RC3" cross CrossVersion.full 
) 

libzmq 사용은 (아치 리눅스에 대한) 버전 3.2.2

이것은 application.conf

akka { 
    loglevel = DEBUG 
    zeromq { 
    socket-dispatcher { 
     executor = thread-pool-executor 
     type = "PinnedDispatcher" 
    } 
    } 
} 
+0

FYI - 나를 위해 일합니다. PULL 소켓이 메시지를받습니다. 죄송합니다. 파이썬을 보내기 전후에 수면을 추가하려고 할 수도 있습니다 (1 초). 배우가 연결 기회를 얻기 전에 바인딩하고 전송하는 경쟁 조건이있을 수 있습니다. –

답변

0

좋아하다, 문제를 발견 . 그것은 libzmq 라이브러리 버전입니다. 라이브러리를 2.2로 다운 그레이드합니다. 나는 Akka 팀의 티켓을 만들었습니다. https://www.assembla.com/spaces/akka/tickets/2769-akka-zeromq-doesn-t-receive-messages-with-libzmq-3-2#/activity/ticket :

+0

libzmq의 api는 libzmq의 기존 클라이언트를 깨뜨린 결과로 버전 2.x와 최신 3.x 릴리스 사이에서 상당히 변경되었습니다. 특히, pubsub 필터링은 현재 구독자 측이 아닌 게시자 측에서 수행됩니다. 이러한 변경 사항에 대한 자세한 내용은 [여기] (http://www.zeromq.org/docs:3-1-upgrade)에 있습니다. – damienh

+0

나는 같은 문제가 있었다. 소스에서 ZeroMQ 2.2를 빌드하면 문제가 해결됩니다. 루비의 'ffi-rzmq'보석은 다운 그레이드로 인해 고장 나고, 단순히 'zmq'보석을 사용하는 것으로 나타났습니다. – tfboy