LINUX.ORG.RU

ZeroMQ и PUB/SUB Python


1

1

Изучаю 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 чтоб кто освободился раньше вытаскивал задачу.

С первой частью вопроса написана какая-то каша.

Еще вопрос с PUB/SUB как я понял если субскрабера нет все улетает в dev/null Как можно сделать чтоб оно накапливалось.

см. zmq_setsockopt() и ZMQ_IDENTITY для сабскрайбера, мануал

mashina ★★★★★ ()

Или субскрайберов запущу штук 10 чтоб кто освободился раньше вытаскивал задачу.

а для этого нужно просто использовать PUSH/PULL сокеты + установка HWM (опять см. zmq_setsockopt) на PUSH сокете.

mashina ★★★★★ ()

Какая нагрузка (сообщений в минуту)? У меня есть, специально под vds написанная, легкая неперсистентная очередь сообщений. Как раз начал выделять ее из проекта, проработавшего уже тучу лет.

baverman ★★★ ()

> ясно, что там RabbitMQ не очень хорош ибо ресурсов мало

RabbitMQ довольно лёгкий, там разве что рантайм загрузить в память.

tensai_cirno ★★★★★ ()
Ответ на: комментарий от baverman

Пока не знаю. Там видно будет. Но лишними сущностями VDS не хочу грузить

demmsnt ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.