RabbitMQ核心概念
1.RabbitMQ消息队列核心概念介绍
-
RabbitMQ
- 是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、C,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不错,与SpringAMQP完美的整合,API丰富易用
-
核心概念
- Broker
- RabbitMQ的服务端程序,可以认为一个mq节点就是一个broker
- Producer生产者
- 创建消息Message,然后发布到RabbitMQ中
- Consumer消费者
- 消费队列里面的消息
- Message消息
- 生产消费的内容,有消息头和消息体,也包括多个属性配置,比如routingKey路由键
- Queue队列
- 是RabbitMQ的内部对象,用于存储消息,消息都只能存储在队列中
- Channel信道
- 一条支持多路复用的通道,独立的双向数据流通道,可以发布、订阅、接收消息
- 信道是建立在真实的TCP连接内的虚拟连接,复用TCP连接的通道
- Connection连接
- 是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑,一个连接上可以有多个channel进行通信
- Exchange交换机
- 生产者将消息发送到Exchange,交换机将消息路由到一个或者多个队列中,里面有多个类型,队列和交换机是多对多的关系
- RoutingKey路由键
- 生产者将消息发给交换机的时候,一般会指定一个RoutingKey,用来指定这个消息的路由规则
- 最大长度255字节
- Binding绑定
- 通过绑定将交换机与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样RabbitMQ就知道如何正确地将消息路由到队列了
- 生产者将消息发送给交换机时,需要一个RoutingKey,当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中
- Virtual Host虚拟主机
- 用于不同业务模块的逻辑隔离,一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue
- 默认是/
- /dev
- /test
- /pro
- Broker
2.Exchange交换机介绍
- RabbitMQ的Exchange交换机
- 生产者将消息发送到Exchange,交换机将消息路由到一个或者多个队列中,交换机有多个类型,队列和交换机是多对多的关系
- 交换机只负责转发消息,不具备存储消息的能力,如果没有队列和exchange绑定,或者没有符合的路由规则,则消息会被丢失
- RabbitMQ有四种交换机类型,分别是Direct exchange、Fanout exchange、Topic exchange、Headers exchange,最后一个基本不用
- 交换机类型
- Direct Exchange定向
- 将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配
- 处理路由键
- Fanout Exchange广播
- 只需要简单的将队列绑定到交换机上,一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息
- Fanout交换机转发消息是最快的,用于发布订阅、广播形式,中文是扇形
- 不处理路由键
- Topic Exchange通配符
- 主题交换机是一种发布、订阅的模式,结合了直连交换机和扇形交换机的特点
- 将路由键和某模式进行匹配。此时队列需要绑定到一个模式上
- 符号“#”匹配一个或多个词,符号“*”仅仅匹配一个词
- Headers Exchange(少用)
- 根据发送的消息内容中和headers属性进行匹配,在绑定Queue与Exchange时指定一组键值对
- 当消息发送到RabbitMQ时会取到该消息的headers与Exchange绑定时指定的键值对进行匹配
- 如果完全匹配则消息会路由到该队列,否则不会路由到该队列
- 不处理路由键
- Direct Exchange定向