我有或的NodeJS的python / Django的或...这些服务工作正常写入多个应用程序。但是需要有相互的pub / sub异步通信。
在的NodeJS是没有问题的,并且很容易的pub / sub任何redis的信道。
提问:我的问题是我如何能持续订阅Redis的频道和接收与其他服务公布的数据?
注:很多环节建议使用Django的渠道。但我想这是不这样做的方式。如果是这样任何一个可以帮助我,并就如何做到这一点的详细信息。
更新:Django的默认情况下是不基于事件的类似的NodeJS。所以,如果我使用Redis的客户,我应该例如检查Redis的每一秒钟,看看什么是出版与否。我不认为使用python的只是一个Redis的客户就足够了。
真的很感激。
有很多的替代品。如果你有FIFO问题,你必须使用队列,以一个微服务连接到另一个。对于我来说,如果你没有,你可以使用RabbitMQ大数据的问题,这是非常实用和非常有效的,否则,如果你有,你可以使用Kafka大数据问题。有各种各样的服务。
如果你只想发布/订阅。最好的工具就是Redis的,这是非常快速和易于集成。如果您关心如何实现它在Python只看article
这是可能在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.')
为了处理订阅Redis的,你需要有一个单独的连续运行的进程(服务器),它会监听Redis的,然后让你的数据进行处理。 django-channels
将通过在worker
运行的代码做同样的
正如上面指出的,Django提供了便捷的方式通过使用Django management command
方式来运行“服务器”。当运行一个Django的管理命令,你有你的代码,即到ORM的完全访问权限,以及。
只有细节,你提到Async
通信。在这里,你需要考虑到Django的ORM是严格同步的代码,你需要注意你想要如何使用ORM与异步代码。也许你需要弄清楚你是什么意思async
这里。
至于Redis的消息处理,你可以使用它工作的库。例如,aioredis
或redis-py