RabbitMQ的主题交换(如http://www.rabbitmq.com/tutorials/tutorial-five-python.html中所述)允许使用weather.US.newyork
或weather.US.*
等密钥进行路由选择,以*
进行外卡选择。它在内部使用什么样的算法和数据结构来对传入的消息密钥进行模式匹配。
它用于存储队列绑定密钥的数据结构是什么?它是如何将它与传入的路由密钥进行比较的。
答案 0 :(得分:6)
RabbitMQ的家伙写了几篇博文,详细介绍了他们如何进行主题路由:
总而言之 - 似乎(至少从版本2.4开始),它们使用trie - 树数据结构,在下一个节点存储绑定密钥的每个段。
虽然他们没有明确用于遍历trie的算法,但是为了应对*和#用于通配符选择,有必要回溯通过trie来捕获所有可能的匹配。但是,这种开销可能很低,特别是在最简单的情况下,上面第二篇文章的基准测试表明,trie比其他优化的数据结构更快,以避免回溯。