Пулы рабочих и мультитенантные очереди с RabbitMQ

Я работаю над веб-приложением, которое является многопользовательским облачным приложением (множество клиентов, каждый со своей отдельной «средой», но все на общих наборах оборудования ), и мы предоставляем пользователю возможность группировать работу для последующей обработки. Типы пакетной работы на самом деле не важны, их просто достаточно, что делать это без очереди работ нецелесообразно. Мы выбрали RabbitMQ в качестве базовой структуры очереди.

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

Есть ли относительно простой способ добиться этого? Я новичок в RabbitMQ и действительно не смог добиться того, что нам нужно. Мы также не хотим писать очень сложное многопоточное потребительское приложение, поскольку это время разработки и тестирования, которое мы, вероятно, не можем себе позволить. Наш стек основан на Windows / .Net / C #, если это важно, но я не думаю, что это должно иметь большое значение в рассматриваемом вопросе.

13
задан marc_s 28 November 2011 в 20:46
поделиться