Изучаю ZeroMQ. Цель легкий мессаджинг для VDS (ясно, что там RabbitMQ не очень хорош ибо ресурсов мало).
Беру пример из документации:
Субскрайбер:
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5000")
socket.setsockopt(zmq.SUBSCRIBE, "sendmail")
while True:
print socket.recv()
Паблишер:
import zmq
from random import choice
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5000")
while True:
socket.send( msg )
Все работает.
Модифицируем:
Субскрайбер:
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5000")
socket.setsockopt(zmq.SUBSCRIBE, "sendmail")
print socket.recv()
Паблишер:
import zmq
from random import choice
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://127.0.0.1:5000")
socket.send( msg )
Опытным путем удалось установить, что при посылке большого числа сообщений они начинают приходить. Похоже на буфферизацию. Как её отрубить?
Еще вопрос с PUB/SUB как я понял если субскрабера нет все улетает в dev/null Как можно сделать чтоб оно накапливалось. Мне не хочется открывать для каждого канала свой QUEUE и лить туда. Хочется чтоб у меня паблишер плюнул задание и ушел заниматься своим делом, как субскрайбер появился (он мог долго обрабатывать предыдущее) он обработал плюнутое паблишером. Или субскрайберов запущу штук 10 чтоб кто освободился раньше вытаскивал задачу.