java - 在 Spring 应用程序的运行时动态管理 rabbitmq 消费者
问题描述
我需要设置一个算法,让 spring 应用程序通过 web 服务将打印作业传递给多台打印机,并能够动态管理可用的打印机。
Spring web 应用程序(云)必须了解连接到 PC 的每台打印机的当前状态(我们办公室的物理设备)是否在线就绪、缺纸、离线等,并决定是否将打印机排除在打印之外,直到纸张已重新填充,在线等。因此,我通过一些外部服务(PrintNode.com)部分实现了这一点,它使我能够及时了解已连接打印机的状态。
因此,假设我有 5 台打印机连接到 PC,并且 spring 应用程序知道它及其状态。此外,我们的网站会出现大量流量(甚至可能是每分钟 200 个打印作业)。
然后我们设置 RabbitMQ,需要一个队列和 ack ( channel.basicQos(1);
) 和多个消费者。每个消费者将代表一台打印机。它会工作得很好——我们将 200 个作业排入队列,当消费者完成前一个作业时,它会发送ack
并接收另一个作业。
问题在于管理打印作业(消费者)。当打印机死机或缺纸时,我希望能够排除代表打印机的特定消费者,直到我手动修复它。我不确定是否有能力删除特定的消费者或设置新的消费者。此外,消费者必须知道它所代表的打印机 - 需要将打印机 ID 发送到远程打印服务。我们正在玩弄SimpleMessageListenerContainer
,但它对消费者的控制有限。
我们也在考虑一种打印机一队列方案,但没有交换等待可用消费者,然后将其放入连接到该消费者的队列中。
任何关于如何实现目标的想法都将不胜感激。
解决方案
推荐阅读
- xaml - 在网格 UWP 中居中 StackPanel
- android - 为什么我可以将我的应用程序升级到使用不同密钥库签名的版本
- android - 谷歌地图只是在模拟器上显示“谷歌”标志,但在真实设备上工作正常
- angular - Angular - 如何将可观察的访问令牌添加到传出的 HTTP 请求?
- javascript - 如何在反应谷歌图表中使用折叠方法
- visual-studio-code - Visual Studio 代码垂直指南
- facebook - Facebook Pixel:在目录中找不到提供的产品参数 ID
- powershell - 在 Where 语句中使用数字范围
- java - 在 Java Eclipse 中使用 Selenium WebDriver 启动 Chrome 时出错 - 线程“main”中出现异常
- c# - 无法为数据模板工具提示设置父数据上下文