RabbitMq как брокер веб-сокетов
В настоящее время мы используем эту схему:
Laravel -> RabbitMq -> Exchanges
public, private, presence (type of web-socket channels) -> Queues (web-socket channel name)
-> SocketCluster -> Websockets
Это идеально подходит для наших целей, и у нас есть горизонтальный масштаб. Но это нормально только для каналов с более чем 1 пользователем.
Например, нам нужна система уведомлений через веб-сокет. Итак, в нашей схеме мы должны создать 1 очередь на 1 пользователя и это сбивает с толку... И все очереди будут иметь auto-delete
тег и будет durable
, Наш проект перегружен, поэтому представьте, что 10 000 пользователей покинут сайт (очередь отключена) одновременно.
Кроме того, я подумал об использовании redis
для такого рода каналов. Но redis
брокер для SocketCluster не поддерживает redis-cluster
(это очень нежелательный способ выписать собственный драйвер с поддержкой кластера), поэтому поддержка горизонтального масштабирования отсутствует.
Может быть, я не понимаю rabbit
вообще, и нам нужно изменить нашу схему, или мы можем решить нашу проблему с помощью встроенных ресурсов кролика (Google так много, нет ответов). Или второй способ (redis
) единственный, кто делает это правильно.
Заранее спасибо. Даже правильное направление поможет.