首页 > 解决方案 > 在 Spring 应用程序的运行时动态管理 rabbitmq 消费者

问题描述

我需要设置一个算法,让 spring 应用程序通过 web 服务将打印作业传递给多台打印机,并能够动态管理可用的打印机。

Spring web 应用程序(云)必须了解连接到 PC 的每台打印机的当前状态(我们办公室的物理设备)是否在线就绪、缺纸、离线等,并决定是否将打印机排除在打印之外,直到纸张已重新填充,在线等。因此,我通过一些外部服务(PrintNode.com)部分实现了这一点,它使我能够及时了解已连接打印机的状态。

因此,假设我有 5 台打印机连接到 PC,并且 spring 应用程序知道它及其状态。此外,我们的网站会出现大量流量(甚至可能是每分钟 200 个打印作业)。

然后我们设置 RabbitMQ,需要一个队列和 ack ( channel.basicQos(1);) 和多个消费者。每个消费者将代表一台打印机。它会工作得很好——我们将 200 个作业排入队列,当消费者完成前一个作业时,它会发送ack并接收另一个作业。

问题在于管理打印作业(消费者)。当打印机死机或缺纸时,我希望能够排除代表打印机的特定消费者,直到我手动修复它。我不确定是否有能力删除特定的消费者或设置新的消费者。此外,消费者必须知道它所代表的打印机 - 需要将打印机 ID 发送到远程打印服务。我们正在玩弄SimpleMessageListenerContainer,但它对消费者的控制有限。

我们也在考虑一种打印机一队列方案,但没有交换等待可用消费者,然后将其放入连接到该消费者的队列中。

任何关于如何实现目标的想法都将不胜感激。

标签: javaspringspring-bootprintingrabbitmq

解决方案


推荐阅读