关于java:rabbitmq上基本结构和高可用

31次阅读

共计 1879 个字符,预计需要花费 5 分钟才能阅读完成。

rabbitmq 由 Erlang 语言编写,实现了 AMQP 协定,是一款易用性、扩展性、高可用的分布式 mq。

一、根本构造

这张图揭示了 rabbitmq 的根本构造,解释几个概念

  • broker
    rabbit 服务实例
  • vhost 虚拟主机
    每个 vhost 实质上就是一个 mini RabbitMQ 服务器,领有本人的队列、交换器、绑定和权限机制
  • channel 信道
    生产者、消费者和 broker 建设连贯(connection)后,在链接上又建设的一层轻量级链接。

    如果把 Connection 比作一条光纤电缆的话,那么 Channel 信道就比作成光纤电缆中的其中一束光纤。一个 Connection 上能够创立任意数量的 Channel

  • queue 队列
    外部保护的音讯队列
  • exchange 交换机
    决定了消息传递到 queue 的形式
  • bind 绑定关系
    exchange 和 queue 之间的分割,决定了音讯的传递

    • binding-key:
      exchange 和 queue 分割的 key
  • message

    • routing-key:
      消息传递时路由。某些 exchange 类型,,以此传递到特定的 queue 中。
      如果 binding-key 是一辆公交车,会按特定路线行驶;那么 routing-key 就是票根,这张票对应着某辆公交车,带 message 去往目的地
    • header:
      音讯头,决定了 headers 这种交换机的路由形式

exchange 类型

重点解释下 exchange 的几种类型

direct

exchange 和 queue 绑定时指定 binding-key。
消息传递时,通过音讯体中的 routing-key 找对应的 binding-key,发送到具体的 queue 中

如果 message 中的 routing-key 是 hello,发送到 direct 类型的 exchange 时,会寻找 binding-key=”hello” 的绑定键。
能找到这个 binding-key 就推送数据到对应的队列;找不到就抛弃 message

default

一种非凡的 direct exchange,创立 exchange 时不指定 exchange 名称(或名称传空串)就会创立 default exchange
新创建 queue 如果没设置绑定关系,会主动绑定到 default exchange 上,且 binding-key 与新创建的队列命雷同

比方新创建 queue 名为world,未设置绑定关系会绑定在 default exchange 上,binding-key=”world”;此时发送一条 routing-key=”world” 的音讯,天然会路由到 queue=”world” 的队列上

fanout

播送模式,发送到 fanout exchange 的音讯,会播送到全副与其绑定的 queue 上。

fanout 模式不关怀 binding-key 和 routing-key

topic

主题模式,与 direct 有些相似;差异在于,direct 模式是精准匹配 binding-key 和 routing-key,而topic 模式是含糊匹配

topic 模式 匹配符有两种:#*

图中给了具体解释(topic-exchange),此处不多着笔墨

headers

也是一种含糊匹配的形式。
不过headers 模式不再依附 routing-key 匹配,而是利用音讯中的 headers 头传到

二、集群高可用

原来一个 broker 为您服务,当初有 N 个 broker 为您服务。

一般集群

一般集群模式会将 元数据 拷贝,集群中的每个节点都有其它节点的元数据信息。

元数据蕴含以下内容

  1. 队列元数据:队列名称、属性;
  2. 交换器元数据:交换器名称、类型和属性;
  3. 绑定元数据:交换器与队列绑定关系,如 binding_key;
  4. vhost 元数据:虚拟主机外部配置和属性;

元数据只提供信息,能通知你某个队列在哪个 broker 节点上。

图中消费者要生产 broker1 上的 queue1 的音讯,但消费者链接到了 broker3 上。
broker3 通过元数据信息晓得 queue1 在 broker1 上,将 转发 这次申请。
通过这种形式,消费者生产到了 broker1 的 queue1 音讯。

一般集群的 劣势
音讯数据只保留了一份,节约磁盘空间
一般集群的 劣势
如果一个 broker 故障,这个 broker 上的 queue 将不能操作

镜像集群

镜像模式 的集群是在一般模式的根底上,通过 policy 来实现,应用镜像模式能够实现 RabbitMQ 的高可用计划。

以我的了解,镜像模式是在队列层面进行同步,主队列负责写,从队列作为镜像,复制从队列的信息,提供读服务。

消费者在生产音讯时,无需再作转发;而且如果某个 broker 故障,则从新选主。

附录

P6-P7 常识合辑

正文完
 0