Mik*_*ell 2 messaging jms message-queue rabbitmq
我正在寻求解决消息传递服务器和队列的 FIFO 性质所遇到的问题。在某些情况下,我希望根据消息传递顺序以外的标准将队列中的消息分发到消费者池。理想情况下,这将防止用户占用系统中的共享资源。以这个过于简化的场景为例:
鉴于每个用户的垃圾箱中可能有大量消息,我们有哪些选项可以允许并发处理每个垃圾箱而不考虑排队时间?在我看来,有几个明显的解决方案:
在我们的例子中,创建一个单独的队列并管理每个用户的消费者确实不切实际。这是可以做到的,但我认为如果合理的话我真的更喜欢第二种选择。我们正在使用 RabbitMQ,但如果有更适合此任务的技术,则不一定与其绑定。
我正在考虑使用 Rabbit 的消息优先级来帮助随机发送的想法。通过随机为消息分配 1 到 10 之间的优先级,这应该有助于分发消息。这种方法的问题是,如果队列永远不会完全清空,那么具有最低优先级的消息可能会永远卡在队列中。我以为我可以在消息上使用 TTL,然后以升级的优先级重新排队消息,但我在文档中注意到了这一点:
应过期的消息仍然只会从队列头部过期。这意味着与普通队列不同,即使每个队列的 TTL 也可能导致过期的低优先级消息卡在未过期的高优先级消息后面。这些消息永远不会被传递,但它们会出现在队列统计信息中。
我担心我可能会因为这种方法而陷入兔子洞。我想知道其他人是如何解决这个问题的。任何有关创意路由、消息传递模式或任何替代解决方案的反馈将不胜感激。
所以我最终从网络路由器手册中取出了一页。这是路由器需要解决的问题,以实现公平的流量模式。该视频对问题和解决方案进行了很好的细分。
将问题翻译到我的领域:
以及解决方案:
负载均衡器是通道和已知数量的队列的包装器,它使用加权算法来平衡每个队列上收到的消息。我们发现了一篇非常有趣的文章/实现,到目前为止似乎运行良好。
通过此解决方案,我还可以在发布消息后确定工作区的优先级,以提高其吞吐量。这是一个非常好的功能。
我面临的最大挑战是队列管理。将会有太多的队列需要长时间绑定在交换机上。我正在开发一些工具来管理它们的生命周期。
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |