java 0MQ路由器经销商范例在Docker容器中不工作
尝试使用0MQ路由器经销商范例在多个客户端和服务之间进行通信并完成工作
客户端、代理和服务器在各自的Docker容器中运行 如果我将客户机、代理、worker作为独立的Java程序而不是Docker容器运行,那么一切都正常
cient连接到路由器端口并发送消息,但未从代理收到响应
代理绑定到路由器和经销商端口,但无法处理任何消息
工人连接到经销商端口,但未分配任何工作
下面是客户端代码段
reqSocket = context.socket(SocketType.REQ);
String reqStr = "tcp://a.b.c.d:" + config.getRouterPort();
boolean ret = reqSocket.connect(reqStr);
String json;
json = objMap.writeValueAsString(req);
ret = reqSocket.send(json.getBytes(), 0);
byte[] recv = reqSocket.recv();
下面是代理代码片段
routerSocket = context.socket(SocketType.ROUTER);
String routerString = "tcp://*:" + config.getRouterPort();
boolean ret = routerSocket.bind(routerString);
dealerSocket = context.socket(SocketType.DEALER);
String dealerString = "tcp://*:" + config.getDealerPort();
ret = dealerSocket.bind(dealerString);
ZMQ.proxy(routerSocket, dealerSocket, null);
下面是工作代码片段
listener = context.socket(SocketType.REP);
String dealerStr = "tcp://a.b.c.d:" + config.getDealerPort();
boolean ret = listener.connect(dealerStr);
while (true) {
byte[] msg = listener.recv(0);
boolean ret = listener.send(objMap.writeValueAsBytes(processMessage(msg)), 0);
}
任何帮助解决此问题或任何指针都将不胜感激
# 1 楼答案
现在,通过让代理容器公开经销商和路由器端口,并将它们映射到主机上的端口,这一问题已经得到解决