我有一个ROUTER-DEALER ZMQ套接字连接。在某些非常特殊的情况下,我得到的是Errno 65,也就是当我尝试将数据从ROUTER发送到DEALER时。这是堆栈跟踪。
org.zeromq.ZMQException: Errno 65 :
at org.zeromq.ZMQ$Socket.mayRaise(ZMQ.java:2744)
at org.zeromq.ZMQ$Socket.send(ZMQ.java:2592)
at org.zeromq.ZMQ$Socket.sendMore(ZMQ.java:2567)
at au.com.metrotrains.ptv.api.socket.ClientManager.sendToClient(ClientManager.java:225)
at au.com.metrotrains.ptv.api.socket.ClientManager.sendHeartbeat(ClientManager.java:136)
at au.com.metrotrains.ptv.api.socket.ClientManager.run(ClientManager.java:85)
at java.lang.Thread.run(Thread.java:748)
我已经这样定义了我的ROUTER套接字:
// Router side
context = ZMQ.context(1);
receiver = context.socket(ZMQ.ROUTER);
receiver.setRouterMandatory(true);
receiver.setSendTimeOut(10000);
receiver.bind("tcp://*:5559");
还有我的经销商:
// Dealer side
this.clientSocket = context.socket(ZMQ.DEALER);
this.clientSocket.setProbeRouter(true);
this.monitorSocket = context.socket(ZMQ.PAIR);
this.clientSocket.connect("tcp://SERVER_IP:5559");
似乎DEALER可以向ROUTER发送消息,但ROUTER无法更新DEALER!
以下几行是引发异常的地方。
// Router side
// Client id is the first byte of first message received from dealer
receiver.sendMore(clientObject.getId());
receiver.sendMore(command);
receiver.send(data, 0);
你知道怎么了吗?