注:资料收集自网络与官方网站网络
direct exchange根据消息的routing key来传送消息。direct exchange是单一传播路由消息的最佳选择(尽管它们也能够用于多路传播路由),如下是它们的工做原理: 架构
direct exchange常常用于在多个工做者(同一应用程序的多个实例)之间分配任务。direct exchange能够用图形方式表示以下:分布式
图源:官网网站
图源:网络spa
fanout exchange路由消息到全部的与其绑定的queue中,忽略routing key。若是N个queue被绑定到一个fanout exchange,当一条新消息被发布到exchange时,消息会被复制而且传送到这N个queue。fanout exchange是广播路由的最佳选择。由于一个fanout exchange传送消息的副本到每个与其绑定的queue,它的使用状况很类似:操作系统
一个fanout exchange图形化的表述以下:设计
图源:官网游戏
图源:网络事件
Topic exchange路由消息到一个或者多个queue,基于消息的routing key和queue与exchange之间的绑定模式的匹配。Topic exchange常常被用于实现各类发布/订阅模式的变化。Topic exchanges一般被用于多路广播路由消息。 路由
Topic exchange有很是多的应用场景。当一个问题牵涉到多个consumer/应用程序,他们有选择的选择他们接收何种何种类型的消息。能够考虑使用topic exchange。
使用示例:
一个topic exchange图形化的表述以下:
图源:网络
header exchange为在多个属性进行路由而设计的,这些属性更适合描述为消息头,而不是routing key。headers exchanges忽略routing key属性,相反用于路由的属性是从headers属性中获取的。若是消息头的值等于指定的绑定值,则认为消息是匹配的。
能够使用多个header匹配将一个queue绑定到header exchange。在这种状况下,broker须要从应用程序开发者那边获取多条信息,也就是说,是否应该考虑任何headers匹配的消息,仍是全部headers都匹配的消息?这就是所谓的“x-match”绑定参数。当“x-match”参数的值被设为“any”,只要一个匹配的header值就足够了。相反的,设置“x-match”的值为“all”须要全部的headers值匹配。
Headers exchanges被视为“direct exchanges on steroids”。由于其依据headers值路由消息,能够被当作direct exchanges使用,routing key没必要是一个字符串;举例来讲它能够是一个整数或者一个hash(dictionary)
default exchange是一个没有名称的(空字符串)被broker预先申明的direct exchange。它所拥有的一个特殊属性使它对于简单的应用程序颇有做用:每一个建立的queue会与它自动绑定,使用queue名称做为routing key。
举例说,当你申明一个名称为“search-indexing-online”的queue时,AMQP broker使用“search-indexing-online”做为routing key将它绑定到default exchange。所以,一条被发布到 default exchange而且routing key为"search-indexing-online"将被路由到名称为"search-indexing-online"的queue。换句话说,default exchange使直接传送消息到queue成为可能,即便从技术角度上而言,事实并非这样。