Pattern¶
Pattern Channel - мощный механизм маршрутизации Redis. Данный тип channel отправляет сообщения потребителям в соответсвии с паттерном,
указанном при их подключении к channel и ключом самого сообщения.
Масштабирование¶
Если ключ сообщение совпадает с паттерном нескольких потребителей, оно будет отправлено всем им. Таким образом, горизонтальное масштабирование путем увеличения количества сервисов-потребителей невозможно только средствами Redis Pub/Sub.
Если вам нужен подобный функционал, посмотрите в сторону Redis Streams или других брокеров (например, Nats или RabbitMQ).
Пример¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Объявление потребителей¶
Для начала мы объявили несколько потребителей для двух каналов *.info* и *.error:
8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Note
Обратите внимание, что handler1 и handler2 подписаны на один channel:
cообщения будут приходить оба этих обработчика.
Распределение сообщений¶
Теперь распределение сообщений между этими потребителями будет выглядеть следующим образом:
await broker.publish("", "logs.info") # handlers: 1, 2
Сообщение 1 будет отправлено в handler1 и handler2, т.к. они слушают channel с паттерном *.info*
await broker.publish("", "logs.error") # handlers: 3
Сообщение 2 будет отправлено в handler3, т.к. он слушает channel с паттерном *.error