Django 频道“组订阅中 N 个频道的 ERROR Y 超出容量”

thi*_*ybk 2 django nginx django-channels daphne

我正在使用我的 Django 应用程序进行负载测试,该应用程序使用 Django 通道和 redis 通道层(djangographene-djangochannelsgraphene-subscriptionschannels-redis)提供 GraphQL 订阅。作为我现在使用的 ASGI 服务器daphne。我nginx用作代理。后端通过 GraphQL 订阅发布消息的周期取决于后端通过 MQTT 接收的消息的周期。我正在增加外部数据提供者向 MQTT 代理发布消息的周期,这意味着后端必须处理这些消息并通过 GraphQL 订阅发布消息的周期。我面临以下错误:

2020-03-11 08:33:58,464 ERROR    2 of 12 channels over capacity in group subscriptions
Run Code Online (Sandbox Code Playgroud)

这个问题似乎是由channels_redis引起的。我可以扩展基础设施来解决这个问题吗?

小智 7

默认容量为 100 条消息,默认消息过期时间为 60 秒。因此,如果在这些容量/时间限制内从未读取通道,它将被填满。

通道可能填满的原因之一是连接从未正确关闭。在这种情况下,频道将保留在组中并最终填满。

缓解这种情况的一种方法是拥有足够的容量和较短的超时时间。您可以通过以下方式更改 Django 设置中的配置:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": REDIS_URL,  # or where your redis server lives
            "capacity": 1500,  # default 100
            "expiry": 10,  # default 60
        }
     }
}
Run Code Online (Sandbox Code Playgroud)