2013-04-30 2 views
1

I éditeur créé avec succès, mais pas réussi à créer l'abonné en utilisant les éléments suivants:-Akka ZMQ erreur de création d'abonné (sondage)

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()); 
    } 

obtenu cette erreur: erreur non capturé fil [Système-akka.zeromq.socket -dispatcher-7] arrêtant JVM puisque 'akka.jvm-exit-on-fatal-error' est activé pour ActorSystem [System] java.lang.NoSuchMethodError: org.zeromq.ZMQ $ Poller.poll (J) J atkka.zeromq.ConcurrentSocketActor $$ anonfun $ 10.apply (ConcurrentSocketActor.scala: 180) à akka.zeromq.ConcurrentSocketActor $$ anonfun $ 10.apply (ConcurrentSocketActor.scala: 179) à akka.zeromq.ConcurrentSocketActor.akka $ zeromq $ ConcurrentSocketActor $$ doPoll (ConcurrentSocketActor.scala: 197) à akka.zeromq.ConcurrentSocketActor $$ anonfun $ recevoir $ 1.applyOrElse (ConcurrentSocketActor.scala: 46) à akka.actor .ActorCell.receiveMessage (ActorCell.scala: 425) à akka.actor.ActorCell.invoke (ActorCell.scala: 386) à akka.dispatch.Mailbox.processMailbox (Mailbox.scala: 230) à akka.dispatch.Mailbox .run (Mailbox.scala: 212) à java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) à java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) à java .lang.Thread.run (Thread.java:722)

Qu'est-ce que cela signifie?

Répondre

0

Il semble que vous soyez absent ou que vous ayez la mauvaise version de zeromq-scala-binding sur votre chemin.

Quelle version de akka et zeromq utilisez-vous?

+0

J'ai construit zeromq-3.2.2.tar (http://download.zeromq.org/zeromq-3.2.2.tar.gz) et jzmq-master (https://github.com/zeromq/jzmq). Zmq.jar généré copié vers le classpath du projet et les bibliothèques semble résider sur mon local: Hakan-MacBook-Pro: lib Hako $ ls | grep libjzmq libjzmq.0.dylib libjzmq.a libjzmq.dylib libjzmq.la Hakan-MacBook-Pro: lib Hako $ ls | grep libzmq libzmq.3.dylib libzmq.a libzmq.dylib libzmq.la – Hako

+0

J'ai construit celui-ci aussi (après avoir lu votre commentaire): https://github.com/zeromq/libzmq et le problème existe toujours. – Hako

+0

Alors maintenant je vois. Avez-vous les bindings jzmq dans votre classpath? Akka s'appuie sur les bindings zeromq-scala disponibles ici https://github.com/valotrading/zeromq-scala-binding et ils ne sont pas une goutte en remplacement les uns des autres. –

2

J'ai eu le même type d'erreur en essayant de travailler avec akka-zeromq et j'ai fait des recherches sur le sujet. Donc, la situation est la suivante: le message d'erreur indique qu'il n'a pas trouvé de méthode long poll(long timeout) dans la classe ZMQ.Poller (voir this réponse pour l'interprétation du message d'erreur). Cela se produit pour les raisons suivantes

  1. Akka est construit avec des liaisons zeromq-scala.
  2. zeromq-scala est censé être compatible avec jzmq, mais malheureusement, ce n'est pas le moment parce que dans les liaisons scala vous avez méthode long poll(long timeout) alors que dans jzmq vous avez int poll(long timeout)

Pour surmonter votre problème, vous localement devez soit reconstruisez Akka avec zmq.jar, ou utilisez une solution de contournement rapide et incorrecte: modifiez le type de retour pour la méthode poll(long timeout) dans la classe ZMQ.Poller de jzmq et reconstruisez les liaisons java. Pour plus de détails et la discussion sur la compatibilité des liaisons, jetez un oeil. here

Cependant, il existe un problème global de compatibilité des liaisons java/scala, mais cela ne fait pas partie de votre question.