【问题标题】:What role does Redis serve in Django ChannelsRedis 在 Django Channels 中扮演什么角色
【发布时间】:2020-12-24 12:57:33
【问题描述】:
最近一直在用django channels做它的支持websocket protocol,我用的是微服务的方式,其他组件通过django通道连接,但是我要为每个连接写一个Consumer class用于接收和处理,对于例子class Consumer(AsyncWebsocketConsumer):,仍然使用redis,指出这部分是官方文档作为通道层存储,所以是作为消息队列、缓存或其他常用功能是否存在?
我写信是为了了解每个连接是否有一个消费者,以及我是否可以将其视为一个消息队列。
但是,我没有找到相关材料来支持我的观点。
您能告诉我我的理解是否正确吗?真诚希望您能提供相关资料以供参考,无论是否正确。
【问题讨论】:
标签:
django
redis
django-channels
【解决方案1】:
这取决于您如何使用它。 django-channel_layers 中 redis 的主要目的是存储不同消费者实例相互通信所需的必要信息。
例如,在频道文档的tutorial 部分中,很明显Redis 被用作频道名称和组名称的存储层。这些存储在 Redis 中,以便可以从任何消费者实例访问它们。例如,如果我创建一个名为“用户”的组,然后向其中添加 3 个不同的频道名称,则此信息将存储在 Redis 中。现在,每当我想向组中的通道发送数据时,我都可以简单地从我的消费者那里引用该组,Django-channels 将自动检索存储在 Redis 中该组下的通道名称。
另一方面,如果您想以非常规的方式使用消费者,即作为后台工作人员,那么 Redis 将成为消息队列。这是因为当您发送包含要由其中一个后台工作人员(“消费”任务的消费者)完成的任务的消息时,这些消息必须存储在某个地方,以便后台工作人员在完成其他任务时可以检索它们.