在阅读了zeromq的基准测试结果后,我想知道是否可以通过zeromq上的HTTP GET调用尝试访问ReSTFul API。 我想测试zeromq是否可以提供低延迟请求 - 回复机制,比如其他替代方案,如jersey客户端API,HTTPurl,Apache hc等。 我想在java中实现这个,所以这就是我想要的, 根据教程
XREP -> HTTP client 通过这种方式,您可以重新使用在HTTP服务器上运行的现有Web应用程序作为工作队列的后端工作程序。这类似于反向HTTP代理,可在多个后端HTTP服务器之间进行负载平衡。
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket requester2 = context.socket(ZMQ.XREP);
requester2.connect("http://domainURL/path");
但这是错误的,因为我正在
java.lang.UnsupportedOperationException: http
我知道我没有正确编码,但如果提供了java中的任何指南或代码片段会有帮助吗?
修改 我找到了一个资源,其中python代码将远程Web服务称为
import json
import zmq
# set up zmq socket
sock = zmq.Context.instance().socket(zmq.REQ)
sock.connect('ipc:///tmp/zurl-req')
# send request
req = {
'method': 'GET',
'uri': 'http://example.com/path'
}
sock.send('J' + json.dumps(req))
# print response
print json.loads(sock.recv()[1:])
所以我试图修改我的java代码如下:
import org.zeromq.ZMQ;
public class hwclient {
public static void main(String[] args) {
ZMQ.Context context2 = ZMQ.context(1);
ZMQ.Socket sock = context2.socket(ZMQ.REQ);
sock.connect("ipc:///tmp/zurl-req");
String req = "{\n" +
" 'method': 'GET',\n" +
" 'uri': 'http://domainURI/path/" +
"}\n";
sock.send(req);
System.out.println("-->" + new String(sock.recv(0)));
context2.term();
}
}
但现在问题是我不知道应该代替"ipc:///tmp/zurl-req"
答案 0 :(得分:0)
Zeromq不提供高级http协议工具。
将tcp与STREAM套接字类型一起使用。
ZMQ.Context ctx = ZMQ.context(1);
ZMQ.Socket sock = ctx.socket(ZMQ.STREAM);
sock.connect("tcp://ip:port");
String req = "GET / HTTP/1.0\r\n\r\n";
sock.send(req);
像这样的东西。
您最好阅读有关原生模式的文档:click