Используя zeromq в конвейере распределенной загрузки, могу ли я получить адрес последнего сервера, на который было отправлено сообщение - PullRequest
0 голосов
/ 01 октября 2010

Если я настрою конвейер, который распределяет нагрузку по кластеру, я бы хотел регистрировать, куда отправляются сообщения.Вот что я имею в виду (python):

import zmq
context = zmq.Context()
socket = context.socket(zmq.DOWNSTREAM)
socket.connect("tcp://127.0.0.1:5000")
socket.connect("tcp://127.0.0.1:6000")

msg = "Hello World\0"
connection_string = socket.send(msg)
# should print "Sent message to tcp://127.0.0.1:5000"
print "Sent message to", connection_string

Но я не могу найти ничего, что говорит об этом.Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 07 октября 2010

Возможно, вы могли бы включить адрес получателя в ответ и зарегистрировать его тогда?

0 голосов
/ 08 декабря 2010

Мои 0,02 цента ...

Ну, я верю, что, поскольку ZMQ маршрутизирует в порядке очереди, это будет циклический перебор.Следовательно, сообщения будут отправляться получателям по порядку.Однако написание кода в этом предположении было бы неправильным, поскольку базовая логика маршрутизации могла бы измениться в будущих версиях.

Для PUSH / PULL я не уверен, однако для REQ / REP я предполагаю REPсторона может отправить ответ обратно в envolope с первым полем в качестве его адреса.Таким образом, REQ может дважды прочитать данные на сокете и получить адрес респондента и данные.

0 голосов
/ 01 октября 2010

Возможно, вы захотите использовать сокеты X (REP | REQ) где-нибудь в топологии для этого.Возможно, вы захотите проверить устройство отслеживаемой очереди: http://github.com/zeromq/pyzmq/blob/master/zmq/devices.pyx

А для общей информации посмотрите на схему и пояснения к шаблонам здесь: http://ipython.scipy.org/doc/nightly/html/development/parallel_connections.html

Также обратите внимание, чтоТип сокета DOWNSTREAM теперь называется PUSH (и соответствующий UPSTREAM изменился на PULL).

...