RabbitMQ: вопрос оптимизации очередей

296
09 декабря 2016, 08:51

Я новичок в RabbitMQ. Прочитал статью «Deploying Microservices Architecture with C#, Part 2».

После прочтения задался следующим вопросом. Есть ли какие-то оптимальные решения по определению количества очередей, если количество клиентов изначально неизвестно.

Дано ASP.NET MVC + RabbitMQ(Pub/Sub).

  • Вариант 1: одна очередь для всех клиентов.
  • Вариант 2: одна очередь на каждого клиента.
  • Вариант 3: пул очередей.

Как определить количество очередей в таком пуле?

Answer 1

Вообще практика зависит от конкретной задачи, но вариант с очередью для каждого пользователя - это точно не относиться к теме Rabbitmq и если вы используете это, то вы делаете что-то неправильно, очередь сообщений не создана для таких структур. Сообщений по сути всегда должно быть больше чем очередей.

Например, нам нужно обеспечить быструю и эффективную многопоточную обработку видео загружаемых пользователями. Для этого мы создаем очередь с названием video_processing и публикуем туда задачи по обработке.

  1. Пользователь зашел на сайт и загрузил видео, отправилось сообщение в очередь.
  2. Консьюмер увидел эту задачу и заблокировал ее на время выполнения
  3. Консьюмер начал обрабатывать задачу
  4. Консьюмер завершил выполнение задачи, куда-то записал отчет
  5. Консьюмер удалил задачу из очереди, таким образом сказав что она завершена успешно
  6. Пользователь получил свое конвертированное видео

В этом сценарии консьюмер мог упасть (сервер перезагрузился), и реббит легко бы отдал задачу другому консьюмеру на выполнение, и следовательно производительность вашей очереди зависит лишь от кол-ва воркеров, которые выполняют задачи из очереди. А также вы бы могли кинуть это сообщение в другую очередь и продолжить его обработку по другим алгоритмам.

Сервер очередей в основном используется для задач связанных с

  1. Обработкой данных
  2. Управлением процессами
  3. Интеграцией и взаимодействием систем

В основном делают одну очередь под определенную задачу (например, очередь отправки писем пользователям), как определить сколько вам очередей нужно, опять же зависит от вашей задачи.

READ ALSO
Стоит задача оптимизации кода C#

Стоит задача оптимизации кода C#

Столкнулся с проблемой в Windows FormПример: Создано две кнопки Btn1, Btn2 и textBox1

319
Игнорирование child'ов при наведении на panel WinForms

Игнорирование child'ов при наведении на panel WinForms

Вот у нас есть panel, и на ней всякие другие элементы, например labelИ в panel, есть событие MouseHover (оно срабатывает, когда мышь наведена на объект),...

341
C#, как ввести текст на сайте? [закрыто]

C#, как ввести текст на сайте? [закрыто]

Допустим, есть сайт wwwyoutube

298
LinqTOSQL. Работа с функцией SubmitChanges() или как не записать то, что не нужно

LinqTOSQL. Работа с функцией SubmitChanges() или как не записать то, что не нужно

Действие происходит в C# WPF паттерн MVVMДля запросов к БД использую LinqToSQL и ее сущности

262