订阅在Django项目Redis的通道

问题描述 投票:1回答:2

我有或的NodeJS的python / Django的或...这些服务工作正常写入多个应用程序。但是需要有相互的pub / sub异步通信。

在的NodeJS是没有问题的,并且很容易的pub / sub任何redis的信道。

提问:我的问题是我如何能持续订阅Redis的频道和接收与其他服务公布的数据?

注:很多环节建议使用Django的渠道。但我想这是不这样做的方式。如果是这样任何一个可以帮助我,并就如何做到这一点的详细信息。

更新:Django的默认情况下是不基于事件的类似的NodeJS。所以,如果我使用Redis的客户,我应该例如检查Redis的每一秒钟,看看什么是出版与否。我不认为使用python的只是一个Redis的客户就足够了。

真的很感激。

django redis microservices publish-subscribe
2个回答
2
投票

有很多的替代品。如果你有FIFO问题,你必须使用队列,以一个微服务连接到另一个。对于我来说,如果你没有,你可以使用RabbitMQ大数据的问题,这是非常实用和非常有效的,否则,如果你有,你可以使用Kafka大数据问题。有各种各样的服务。

如果你只想发布/订阅。最好的工具就是Redis的,这是非常快速和易于集成。如果您关心如何实现它在Python只看article

[Update]

这是可能在Django创建manage.py命令和订阅该管理文件的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.')

2
投票

为了处理订阅Redis的,你需要有一个单独的连续运行的进程(服务器),它会监听Redis的,然后让你的数据进行处理。 django-channels将通过在worker运行的代码做同样的

正如上面指出的,Django提供了便捷的方式通过使用Django management command方式来运行“服务器”。当运行一个Django的管理命令,你有你的代码,即到ORM的完全访问权限,以及。

只有细节,你提到Async通信。在这里,你需要考虑到Django的ORM是严格同步的代码,你需要注意你想要如何使用ORM与异步代码。也许你需要弄清楚你是什么意思async这里。

至于Redis的消息处理,你可以使用它工作的库。例如,aioredisredis-py

© www.soinside.com 2019 - 2024. All rights reserved.