RabbitMQ base 01
2019-05-02 本文已影响0人
ands999
RabbitMQ特点
- 基于erlang语言开发,因此也具有高可用、高并发的优点。
- 健壮、稳定。
- 消息确认机制和持久化机制,可靠性高。
- AMQP
基础架构
AMQP 里主要有两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),这两者都在 Server 端,又称作 Broker ,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型。
几个概念
Queue(消息队列),提供了FIFO的处理机制,具有缓存消息的能力。队列消息可以设置为持久化,临时或者自动删除。
- 设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止系统crash后数据丢失。
- 设置为临时的队列,queue中的消息在系统重启之后就会丢失。
- 设置为自动删除的队列,当没有用户连接时,队列中的数据会被自动删除。
Exchange(交换机),从连接通道(Channel)接收消息后,按照预置的路由规则发送到队列。一个exchange可以绑定多个queue,producer在传递消息的时候会传递ROUTING_KEY,Exchange根据ROUTING_KEY按照特定的路由算法,将消息路由到指定的queue。和Queue一样,Exchange也可设置为持久化,临时或者自动删除。
Exchange的4种类型:
- direct(直接交换器),工作方式类似于单播,Exchange会将消息发送给完全匹配ROUTING_KEY的Queue。
- fanout(广播式交换器),不管消息的ROUTING_KEY设置为什么,Exchange都会将消息转发给所有绑定的Queue。
- topic(主题交换器),工作方式类似于组播,Exchange会将消息转发和ROUTING_KEY匹配模式相同的所有队列。( * 表是匹配一个任意词组,#表示匹配0个或多个词组)。
- headers消息体的header匹配(ignore)。
每种规则用来做匹配的CPU开销是不同的,所以设置了4种交换器。
Binding(绑定),就是路由规则,告诉交换机将何种类型的消息发送到某个队列中。是将一个 Exchange 和一个 Queue 绑定起来。
virtual host(虚拟主机),在rabbitmq server上可以创建多个虚拟的message broker,又叫做virtual hosts (vhosts)。vhost本质上是mini-rabbitmq server,管理自己的exchange和bindings。vhost相当于物理的server,可以为不同app提供边界隔离,使得应用能安全的运行在不同的vhost实例上,相互之间不会干扰。producer和consumer连接rabbit server需要指定一个vhost。
消息传递过程
- 消费者: 创建connection。
- 消费者: 创建信息通道channel。
- 消费者: 定义消息队列queue,并设置相关属性。
- 消费者: 定义特定类型的交换机exchange,并设置相关属性。
- 消费者: 设定绑定规则 (包括交换机名称、队列名称以及路由键routing key)。
- 消费者: 等待消息。
- 生产者: 创建消息。
- 生产者: 将消息投递给信息通道 (注明接收交换机名称和路由键)。
- 交换机: 获取消息,依据交换机类型决定是否匹配路由规则 (如需匹配,则对比消息路由键和绑定路由键)。
- 消费者: 获取并处理消息,发送确认信息。
- 结束: 关闭通道和连接。