Как получать сообщения, опубликованные в Redis перед подпиской на канал - PullRequest
0 голосов
/ 17 мая 2018

Я пишу приложение для публикации сообщений на канале в Redis и их обработки.Это долгоживущее приложение, которое в основном никогда не слушает канал.

def msg_handler():
    r = redis.client.StrictRedis(host='localhost', port=6379, db=0)
    sub = r.pubsub()
    sub.subscribe(settings.REDIS_CHANNEL)
    while True:
        msg = sub.get_message()
        if msg:
            if msg['type'] == 'message':
                print(msg)
def main():

    for i in range(3):
        t = threading.Thread(target=msg_handler, name='worker-%s' % i)
        print('thread {}'.format(i))
        t.setDaemon(True)
        t.start()
    while True:
        print('Waiting')
        time.sleep(1)

Когда я запускаю эту программу, я замечаю, что она не получает сообщения, которые были опубликованы на канале до ее запуска.Он отлично работает, чтобы получать сообщения, отправленные на канал после того, как приложение подписалось на канал.

В производстве очень вероятно, что в канале есть несколько сообщений до запуска программы.Есть ли способ получить эти старые сообщения?

1 Ответ

0 голосов
/ 18 мая 2018

Redis PUB / SUB не хранит опубликованные сообщения.Он отправляет их тому, кто слушал в данный момент.Если вам нужен доступ к старым сообщениям, вы можете:

  1. Использовать Redis Streams .Сейчас они в бета-версии и выходят для версии 5.
  2. Используйте другую систему PUBSUB, например nats.io
...