博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ概念简介
阅读量:6083 次
发布时间:2019-06-20

本文共 2232 字,大约阅读时间需要 7 分钟。

hot3.png

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

1、RabbitMQ的整体架构与名词介绍:

154622_gaF4_2478308.png

2、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可以用图形方式表示如下:

         155102_C0AM_2478308.png

                      图源:官网

        155112_p5bm_2478308.png

                     图源:网络

        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图形化的表述如下:

         155533_wlaK_2478308.png

                            图源:官网

        155608_gNTi_2478308.png

                           图源:网络

        Topic exchange(多路广播交换机)

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

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

         使用示例:

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

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

       155903_xwuk_2478308.png

                                图源:网络

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

转载于:https://my.oschina.net/u/2478308/blog/1519358

你可能感兴趣的文章
关于PHP定时执行任务的实现(转)
查看>>
PHP定时执行任务的实现(转)
查看>>
magento的一些小技巧(转)
查看>>
C++ 运行时类型识别 知道实例父类类型,显示出子类类型
查看>>
Android获取状态栏高度、标题栏高度、编辑区域高度
查看>>
bzoj1452 二维树状数组
查看>>
bzoj2561
查看>>
bzoj1093
查看>>
(转)使用vs调试的时候,如何知道程序阻塞在哪里?
查看>>
Linux其他:环境变量配置
查看>>
设置防止攻击session(疑惑)
查看>>
PHP 服务器及TP5框架遇到的几个错误
查看>>
用VMware克隆CentOS 6.5如何进行网络设置
查看>>
redis conf文件详解(转)
查看>>
7月心情
查看>>
jsp jsp九个内置对象
查看>>
PHP(六)PHP和HTML混合的一种形式
查看>>
前端Js框架汇总
查看>>
Cooperation.GTST团队第一周项目总结
查看>>
递归遍历二叉树
查看>>