Подпишитесь на канал Redis в проекте Django - PullRequest
0 голосов
/ 31 января 2019

У меня есть несколько приложений, написанных с использованием nodejs или python / django или ... Эти службы работают нормально.Но нужно иметь паб / суб асинхронную связь друг с другом.

В nodejs нет проблем, и они легко могут публиковать / передавать на любой канал redis.

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

Примечание: много ссылокПредлагаем использовать джанго-каналы.Но я думаю, что это не способ сделать это.Если да, то кто-нибудь может мне помочь и рассказать, как это сделать.

Обновление: Django по умолчанию не основан на событиях, как nodejs.Так что, если я использую клиент Redis, я должен, например, проверять Redis каждую секунду и посмотреть, опубликовано ли что-нибудь или нет.Я не думаю, что будет достаточно использовать Redis-клиент в Python.

Действительно ценю это.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Для обработки подписок на redis вам потребуется отдельный непрерывно работающий процесс (сервер), который прослушивает redis и затем что-то делает с вашими данными.django-channels сделает то же самое, запустив код в worker

Как указывалось выше, Django предоставляет удобный способ запуска «серверов» с использованием подхода Django management command.При выполнении команды управления django у вас есть полный доступ к вашему коду, то есть к ORM.

Только подробно, что вы упомянули Async связь.Здесь вы должны принять во внимание, что ORM Django является строго синхронизированным кодом, и вам нужно обратить внимание на то, как вы хотите использовать ORM с асинхронным кодом.Возможно, вам необходимо уточнить, что вы подразумеваете под async здесь.

Что касается обработки сообщений redis, вы можете использовать любые библиотеки, которые работают с ней.Например, aioredis или redis-py

0 голосов
/ 31 января 2019

Есть много альтернатив.Если у вас проблема FIFO , вы должны использовать очереди для подключения одного микросервиса к другому.Для меня, если у вас нет проблем с большими данными, вы можете использовать RabbitMQ , это очень практично и очень эффективно, в противном случае, если у вас есть проблема с большими данными, вы можете использовать Kafka .Есть широкий спектр услуг.

Если вы хотите просто Pub / Sub.Лучший инструмент - Redis, он очень быстрый и простой в интеграции.Если вас интересует, как реализовать это в Python, просто посмотрите article

[Update]

Можно создать команду manage.py в django и подписаться на redisв этом файле управления и выполните этот скрипт отдельно от сервера django:

class Command(BaseCommand):
def handle(self, *args, **options):

    r = redis.StrictRedis(host='localhost', port=6379, db=1)
    p = r.pubsub()
    p.psubscribe('topic.*')
    for message in p.listen():
        if message:
            print('message received, do anything you want with it.')
...