RabbitMQ概念简介

注:资料收集自网络与官方网站网络

一、RabbitMQ的总体架构与名词介绍:

二、RabbitMQ的四种Exchange(摘自官网)

        Direct exchange(单一传播交换机)

        direct exchange根据消息的routing key来传送消息。direct exchange是单一传播路由消息的最佳选择(尽管它们也能够用于多路传播路由),如下是它们的工做原理:  架构

  •     一个routing key为K的queue与exchange进行绑定
  •    当一条新的routing key为R的消息到达direct exchange时,若是K=R,exchange 将它路由至该queue    

    direct exchange常常用于在多个工做者(同一应用程序的多个实例)之间分配任务。direct exchange能够用图形方式表示以下:分布式

         

                      图源:官网网站

        

                     图源:网络spa

        Fanout exchange(广播交换机)

        fanout exchange路由消息到全部的与其绑定的queue中,忽略routing key。若是N个queue被绑定到一个fanout exchange,当一条新消息被发布到exchange时,消息会被复制而且传送到这N个queue。fanout exchange是广播路由的最佳选择。由于一个fanout exchange传送消息的副本到每个与其绑定的queue,它的使用状况很类似:操作系统

  •    大量的多用户在线(multi-player online MMO)游戏使用它更新排行榜或者其余的全体事件
  •    体育新闻网站使用fanout exchange向手机客户端实时发送比分更新
  •    分布式系统能够广播各类状态与配置更新
  •    群聊能够使用fanout exchange让消息在参与者之间传输

        一个fanout exchange图形化的表述以下:设计

         

                            图源:官网游戏

        

                           图源:网络事件

        Topic exchange(多路广播交换机)

         Topic exchange路由消息到一个或者多个queue,基于消息的routing key和queue与exchange之间的绑定模式的匹配。Topic exchange常常被用于实现各类发布/订阅模式的变化。Topic exchanges一般被用于多路广播路由消息。    路由

         Topic exchange有很是多的应用场景。当一个问题牵涉到多个consumer/应用程序,他们有选择的选择他们接收何种何种类型的消息。能够考虑使用topic exchange。

         使用示例:

  •    销售与特定地理位置相关的数据,好比销售点
  •    由多个工做者完成的后台任务处理,每一个都可以负责处理指定的任务
  •    库存价格更新(更新其余的财务数据)
  •    包含分类与标签的新闻更新(例如只针对某一个特定的运动或团队)
  •    不一样种类的云服务编制 u 分布式结构/特定操做系统软件的构建与包装,每一个处理者只能处理一个结构或者系统

        一个topic exchange图形化的表述以下:

       

                                图源:网络

        Headers 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(默认交换机)

        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成为可能,即便从技术角度上而言,事实并非这样。

相关文章
相关标签/搜索