2013-04-30 2 views
1

나는 성공적으로 출판사를 만들었지 만 다음을 사용하여 가입자를 작성하는 데 실패 :Akka - ZMQ 가입자 만들기 오류 (여론 조사)

public static void main(String [] args) 
    { 
     ActorSystem system = ActorSystem.create("System"); 
     ActorRef subscriber = system.actorOf(new Props(Sub.class), "subscriber");  
     subscriber.tell(new MyActor("CharlieParker", 50, 25), subscriber); 
    } 
    public class Sub extends UntypedActor 
    { 
     ActorRef subSocket = ZeroMQExtension.get(getContext().system()).newSubSocket(
     new Connect("tcp://127.0.0.1:1237"), 
     new Listener(getSelf()), Subscribe.all()); 
    } 

이 오류가있어 : 스레드에서 catch되지 않은 오류 [시스템-akka.zeromq.socket을 [시스템] java.lang.NoSuchMethodError : org.zeromq.ZMQ $ Poller.poll (J) J 에 대해 'akka.jvm-exit-on-fatal-error'가 활성화되어 있으므로 JVM을 종료합니다. (ConcurrentSocketActor.scala : 180) at akka.zeromq.ConcurrentSocketActor $$ anonfun $ 10.apply (ConcurrentSocketActor.scala : 179) at akka.zeromq.ConcurrentSocketActor.akka $ zeromq $ ConcurrentSocketActor $$ doPoll (ConcurrentSocketActor.scala : 197) at akka.zeromq.ConcurrentSocketActor $$ anonfun $ 수신 $ 1.applyOrElse (ConcurrentSocketActor.scala : 46) at akka.actor .ActorCell.receiveMessage (ActorCell.scala : 425) at akka.actor.ActorCell.invoke (ActorCell.scala : 386) at akka.dispatch.Mailbox.processMailbox (Mailbox.scala : 230) at akka.dispatch.Mailbox .run (Mailbox.scala : 212) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) at java .lang.Thread.run (Thread.java:722)

그게 무슨 소리 야?

답변

0

경로 상에 zeromq-scala-binding의 버전이 누락되었거나 잘못된 것 같습니다.

어떤 버전의 akka 및 zeromq를 사용하고 있습니까?

+0

저는 zeromq-3.2.2.tar (http://download.zeromq.org/zeromq-3.2.2.tar.gz)와 jzmq-master (https://github.com/zeromq/jzmq)를 만들었습니다.). 생성 된 zmq.jar이 프로젝트 클래스 경로에 복사되고 라이브러리가 내 로컬에있는 것처럼 보입니다 : Hakan-MacBook-Pro : lib Hako $ ls | grep libjzmq libjzmq.0.dylib libjzmq.a libjzmq.dylib libjzmq.la 하칸 - 맥북 프로 : lib Hako $ ls | grep libzmq libzmq.3.dylib libzmq.a libzmq.dylib libzmq.la – Hako

+0

나는 또한 (당신의 의견을 읽은 후에) 이것을 만들었습니다 : https://github.com/zeromq/libzmq 그리고 문제는 여전히 존재합니다. – Hako

+0

이제 알겠습니다. 클래스 경로에 jzmq Y 인딩이 있습니까? Akka는 https://github.com/valotrading/zeromq-scala-binding에서 사용할 수있는 zeromq-scala-bindings에 의존하며 서로를 대체 할 수는 없습니다. –

2

akka-zeromq로 작업하는 동안 동일한 유형의 오류가 발생했으며 주제에 대한 조사가있었습니다. 따라서 상황은 다음과 같습니다. 오류 메시지는 ZMQ.Poller 클래스에서 long poll(long timeout) 메서드를 찾지 못했음을 나타냅니다 (오류 메시지 해석은 this 응답 참조). 이는 다음과 같은 이유로 발생합니다.

  1. Akka는 zeromq-scala 바인딩으로 작성됩니다.
  2. zeromq - 스칼라는 jzmq와 호환 있어야하지만, jzmq에 당신이 가지고 로컬로 당신을 당신의 문제를 극복하기 위해 int poll(long timeout)

있는 동안 스칼라 바인딩 당신이 방법 long poll(long timeout)을 가지고 있기 때문에 불행히도 그것은 순간에 아니에요됩니다 zmq.jar로 Akka를 다시 빌드하거나 빠르고 더러운 임시 해결책을 사용하십시오. jmm.ZoneQMQ.Poller 클래스의 poll(long timeout) 메소드에 대한 리턴 유형을 변경하고 Java 바인딩을 재 빌드하십시오. 자세한 내용 및 바인딩 호환성 토론을 보려면 here

그러나 전역 Java/scala 바인딩 호환성 문제가 있지만 질문 범위를 벗어납니다.