zoukankan      html  css  js  c++  java
  • RabbitMQ理论部分

    概念

    queue        队列

    exchange   交换机

    bind          绑定

    channel     通道

    一个发送消息流程包含上述四个概念。消息经过channel传递给exchange,exchange根据bind关系将message传递给queue

     附图

     

    交换机和交换机类型

    1 direct 直连类型

    队列绑定交换机需要指定routeKey,且发送消息需指定routeKey。

    交换机收到消息后会判断routeKey与哪个队列发生直接匹配关系,如果可以关联就会将消息推给指定队列。

    2 fanout 广播类型

    队列绑定无需指定routeKey,发送消息也无需指定routeKey,即使指定也不会生效。

    3 topic 订阅类型

    队列绑定交换机需要指定routeKey,且发送消息需指定routeKey。交换机根据routeKey进行匹配

    举例 

    队列1   routeKey: #.log.#

    队列2   routeKey:#.log.tianmh.succ.#

    队列3   routeKey:#.log.tianmh.fail.#

    情况1 发送消息到交换机 绑定routeKey: log   可以匹配的队列:队列1

    情况2 发送消息到交换机 绑定routeKey: log.tianmh.succ  可以匹配的队列:队列1 队列2

    4headers 头交换机

    有时消息的路由操作会涉及到多个属性,此时使用消息头就比用路由键更容易表达,头交换机(headers exchange)就是为此而生的。头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。

    我们可以绑定一个队列到头交换机上,并给他们之间的绑定使用多个用于匹配的头(header)。这个案例中,消息代理得从应用开发者那儿取到更多一段信息,换句话说,它需要考虑某条消息(message)是需要部分匹配还是全部匹配。上边说的“更多一段消息”就是"x-match"参数。当"x-match"设置为“any”时,消息头的任意一个值被匹配就可以满足条件,而当"x-match"设置为“all”的时候,就需要消息头的所有值都匹配成功。

    头交换机可以视为直连交换机的另一种表现形式。头交换机能够像直连交换机一样工作,不同之处在于头交换机的路由规则是建立在头属性值之上,而不是路由键。路由键必须是一个字符串,而头属性值则没有这个约束,它们甚至可以是整数或者哈希值(字典)等。

    队列

    • Durable(消息代理重启后,队列依旧存在)
    • Exclusive(只被一个连接(connection)使用,而且当连接关闭后队列即被删除)
    • Auto-delete(当最后一个消费者退订后即被删除)
    • Arguments(一些消息代理用他来完成类似与TTL的某些额外功能)
  • 相关阅读:
    java设计模式-建造者模式
    java设计模式-外观模式
    java设计模式-模板方法模式
    java设计模式-原型模式
    java设计模式-代理模式
    java设计模式-装饰模式
    webpack-PWA概念、typeScript打包、webpackDevServer实现请求转发
    webpack七探-库打包
    webpack六探-打包分析、懒加载、浏览器缓存、shimming、环境变量
    webpack五探-tree shaking、模式、代码分割
  • 原文地址:https://www.cnblogs.com/tianmh/p/10025500.html
Copyright © 2011-2022 走看看