2015-12-01 3 views
1

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

XREP -> HTTP client с этим можно повторно использовать существующий веб-приложение, работающее на 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 предусмотрены?

EDIT Я нашел ресурс, где код питона звонит удаленный веб-сервис, как

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

видели пример [здесь] (https://github.com/fanout/zurl#description) –

ответ

0

Zeromq d oes не обеспечивают высокоуровневые протоколы 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

+1

Спасибо! Но есть ли способ указать заголовки HTTP Dynamic для запроса GET? Как и в .header («name»: «value») –

+1

Также @marsgpl вы можете проверить, работает ли 'ctx.socket (ZMQ.STREAM);' работает, поскольку я не нашел никакой зависимости для 'ZMQ.STREAM' в java , Можете ли вы предоставить какое-либо заявление импорта или имя библиотеки? У меня после org.zeromq jeromq 0.3.5

+0

@SaurabhBhoomkar, в Java связывания нет типа STREAM лол https://github.com/zeromq/jzmq/blob /master/src/main/java/org/zeromq/ZMQ.java – marsgpl