我在一个基于多租户云的应用程序的 Web 应用程序上工作(许多客户端,每个客户端都有自己独立的“环境”,但都在共享的硬件集上),我们正在引入用户批量处理的能力为以后的处理工作。批处理工作的类型真的不重要,只是数量足够,没有工作队列就不太实际。我们选择 RabbitMQ 作为我们的底层队列框架。
因为我们是一个多租户应用程序,我们不一定希望客户端能够为另一个客户端造成冗长的队列处理时间,所以我们提出的一个想法是在每个客户端的基础上创建一个队列并拥有指向我们所有客户端队列的共享工作池。问题是,据我所知,工作人员直接绑定到特定队列,而不是交换。在我们的理想世界中,我们的客户端队列仍将在没有一个客户端阻塞另一个客户端的情况下从共享工作池中处理,我们可以通过启动更多工作人员或关闭空闲工作人员来根据需要扩大或缩小该工作池。将工作人员绑定到特定队列实际上可以防止我们这样做,因为我们经常有很多工作人员只是在没有活动的队列上闲置。
有没有相对直接的方法来实现这一点?我对 RabbitMQ 还很陌生,还没有真正能够完成我们所追求的目标。我们也不想编写一个非常复杂的多线程消费者应用程序,这是我们可能负担不起的开发和测试时间。我们的堆栈是基于 Windows/.Net/C# 的,如果这很重要的话,但我认为这不会对手头的问题产生重大影响。