Akka-ZMQ订户创建错误(民意调查)

时间:2013-04-30 08:07:03

标签: akka zeromq jzmq akka-zeromq

我成功创建了发布商,但未能使用以下内容创建订阅者:

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

出现此错误: 来自线程[System-akka.zeromq.socket-dispatcher-7]的未捕获错误因为'akka.jvm-exit-on-fatal-error'为ActorSystem [System]启用而关闭JVM java.lang.NoSuchMethodError:org.zeromq.ZMQ $ Poller.poll(J)J     at akka.zeromq.ConcurrentSocketActor $$ anonfun $ 10.apply(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 $ receive $ 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)     在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:722)

这是什么意思?

2 个答案:

答案 0 :(得分:2)

我在尝试使用akka-zeromq时遇到了同样的错误,并就此主题进行了一些调查。所以情况如下:错误消息表明它没有在类ZMQ.Poller中找到方法long poll(long timeout)(请参阅this回答错误消息解释)。这是因为以下原因

  1. Akka是使用zeromq-scala绑定构建的。
  2. zeromq-scala应该与jzmq兼容,但遗憾的是它现在不是因为在scala绑定中你有方法long poll(long timeout)而在jzmq中你有int poll(long timeout)
  3. 要在本地解决您的问题,您必须使用zmq.jar重建Akka,或者使用快速而又脏的解决方法:在jzmq ZMQ.Poller类中更改方法poll(long timeout)的返回类型并重建java绑定。有关更多详细信息和绑定兼容性讨论,请查看here

    但是,存在全局java / scala绑定兼容性问题,但它超出了您的问题范围。

答案 1 :(得分:0)

您的路径似乎丢失或者zeromq-scala绑定版本错误。

您使用的是哪个版本的akka​​和zeromq?