Я работаю над веб-приложением, которое представляет собой многопользовательское облачное приложение (множество клиентов, каждый со своей отдельной "средой", но все на общих наборах аппаратных средств), и мы представляем возможность для пользователя для завершения работы для последующей обработки. Типы пакетной работы действительно не важны, это просто достаточное количество, которое делает это без рабочей очереди, на самом деле не практично. Мы выбрали RabbitMQ как базовую структуру очереди.
Поскольку мы являемся многопользовательским приложением, мы не обязательно хотим, чтобы клиенты могли вызывать длительные временные процессы очереди для другого клиента, поэтому одна идея, которую мы всплывали, создает очередь для каждого клиента и общий пул работников указывал на ВСЕ наши клиентские очереди. Проблема в том, что, насколько я могу понять, рабочие напрямую связаны с определенной очередью, а не с обменом. В нашем идеальном мире наши клиентские очереди все равно будут обрабатываться без одного клиента, блокирующего другого, из общего пула работников, который мы можем вырастить или сжать, если необходимо, запустив больше рабочих или закрыв простаивающие. Наличие рабочих, привязанных к определенной очереди, мешает нам в этом практическом смысле, так как у нас часто было много рабочих, которые просто простаивали в очереди без активности.
Существует ли относительно прямой способ сделать это? Я новичок в RabbitMQ и на самом деле не смог добиться того, что нам нужно. Мы также не хотим писать очень сложное многопоточное потребительское приложение, либо время, затрачиваемое на время dev и test, которое мы, вероятно, не можем себе позволить. Наш стек - это Windows/.Net/С#, если этот герман, но я не думаю, что это должно иметь важное значение в рассматриваемом вопросе.