RabbitMQ
概述
https://github.com/rabbitmq/cluster-operator

发布者发布消息,消息经由 Exchange 交换机,转发到对应的 Queue 队列上,再通过 Broker 与 Consumer 之间的 Connect Channel, 将消息发送给客户端
Exchange
- Direct 类型:将消息中的 Routing key 与该 Exchange 关联的所有 Binding 中的 Routing key 进行比较,如果相等,则发送到该 Binding 对应的 Queue 中
- Topic 类型:将消息中的 Routing key 与该 Exchange 关联的所有 Binding 中的 Routing key 进行对比,如果匹配上了,则发送到该 Binding 对应的 Queue 中。
- Fanout 类型:直接将消息转发到所有 binding 的对应 queue 中,这种 exchange 在路由转发的时候,忽略 Routing key。
- Headers 类型:将消息中的 headers 与该 Exchange 相关联的所有 Binging 中的参数进行匹配,如果匹配上了,则发送到该 Binding 对应的 Queue 中(不常用,作用于 Direct 类型类似)。
Channel
信道,信道是建立在真实的 TCP 连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息,订阅队列,还是接受消息,这些动作都是在信道完成的。
因为对于操作系统来说建立和销毁 TCP 都是非常安昂贵的开销,所以引入信道的概念,以此来复用一条 TCP 连接
工作模式
Work 队列

多个消费者消费同一个队列,每条消息只能被一个消费者消费
发布订阅

多个消费者各自消费单独的队列
路由模式

在发布订阅的基础上,Exchange 可以根据推送到 Routing Key,转发到具有相同 Routing key 的队列中
主题模式

在发布订阅的基础上,Exchange 可以根据推送到 Routing Key,转发到具有匹配 Routing key 的队列中(支持正则)
延时队列
死信队列
优先级队列
其他
消息持久化
消息顺序性

顺序性分为发送消息顺序,队列中顺序和消费消息的顺序
Rabbitmq 只保证队列中消息的顺序(即单个消费者消费的顺序相同),多个消费者并不能保证
队列属性
消息过期时间
可以分别设置队列的消息过期时间和单个 消息的过期时间
通过**队列属性(x-message-ttl)**设置消息过期时间。