Вызвать HTTP GET через zeromq

После прочтения результатов теста zeromq мне стало интересно, могу ли я попробовать получить доступ к API ReSTFul через HTTP-вызовы GET через zeromq. Я хочу проверить, может ли zeromq предоставить механизм Low-Latency Request-Reply по сравнению с другими альтернативами, такими как API-интерфейс клиента jersey, HTTPurl, Apache hc и т. Д. Я хочу, чтобы это было реализовано в Java, поэтому вот что я пытаюсь, согласно руководство

XREP -> HTTP-клиент. Таким образом, вы можете повторно использовать существующие веб-приложения, работающие на HTTP-сервере, в качестве бэкэнд-работников для рабочей очереди. Это похоже на обратный 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 вызывает удаленный веб-сервис как

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"

1 ответ

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

что-то вроде этого.

Вам лучше прочитать документы о нативных шаблонах: нажмите

Другие вопросы по тегам