我工作的网络应用是基于云计算的多租户应用(许多客户,每个客户都有自己独立的“环境”,但所有客户共享一组硬件资源),我们正在引入用户批量处理功能。 批处理的类型并不重要,只是数量足够大,没有工作队列就不太实际。 我们选择RabbitMQ作为底层队列框架。
由于我们是多租户应用程序,我们不一定希望客户能够导致其他客户的队列处理时间过长,因此我们提出的一个想法是在每个客户端上创建一个队列,并将一个共享的工作池指向所有客户队列。 问题在于,据我所知,工人直接绑定到特定队列而不是交换机。 在我们理想的世界中,我们的客户队列仍将通过共享的工作池进行处理,而不会阻止其他客户端,我们可以通过启动更多工人或关闭闲置工人来根据需要增加或缩小工作池。 由于工人绑定到特定队列,这使我们在实际操作中无法做到这一点,因为我们经常会有很多工人在没有活动的队列上闲置。
有没有相对简单的方法来实现这一点? 我对RabbitMQ还比较陌生,还没有能够实现我们想要的功能。 我们也不想编写非常复杂的多线程消费程序,因为这会耗费时间在开发和测试中,而这可能是我们负担不起的。 我们的技术栈是基于Windows/.Net/C#,但我认为这不应该对问题有重大影响。
由于我们是多租户应用程序,我们不一定希望客户能够导致其他客户的队列处理时间过长,因此我们提出的一个想法是在每个客户端上创建一个队列,并将一个共享的工作池指向所有客户队列。 问题在于,据我所知,工人直接绑定到特定队列而不是交换机。 在我们理想的世界中,我们的客户队列仍将通过共享的工作池进行处理,而不会阻止其他客户端,我们可以通过启动更多工人或关闭闲置工人来根据需要增加或缩小工作池。 由于工人绑定到特定队列,这使我们在实际操作中无法做到这一点,因为我们经常会有很多工人在没有活动的队列上闲置。
有没有相对简单的方法来实现这一点? 我对RabbitMQ还比较陌生,还没有能够实现我们想要的功能。 我们也不想编写非常复杂的多线程消费程序,因为这会耗费时间在开发和测试中,而这可能是我们负担不起的。 我们的技术栈是基于Windows/.Net/C#,但我认为这不应该对问题有重大影响。