RabbitMQ
2020-09-03 15:21:26 61 举报
AI智能生成
RabbitMQ基础知识脑图,基于3.8+
作者其他创作
大纲/内容
消息持久性标记
通过MessageProperties.PERSISTENT_TEXT_PLAIN并不能完全保证不会丢失消息
如果您需要更强有力的保证,则可以使用发布者确认。
将消息标记为持久性并不能完全保证不会丢失消息
尽管告诉RabbitMQ将消息保存到磁盘,但是RabbitMQ接受消息但尚未将其保存时,仍有很短的时间
RabbitMQ不会对每条消息都执行fsync(2)-它可能只是保存到缓存中,而没有真正写入磁盘
集群方式
副本集群
- 所有数据/状态都在所有节点之间复制
- 消息队列是一个例外,消息队列默认情况下位于一个节点上,尽管它们在所有节点上都是可见且可访问的
主节点宕机后,集群不可用,无法自动转移故障节点
镜像集群
存在两个节点之间数据落差大
由一个主服务器和多个镜像组成
发布到队列的消息将复制到所有镜像
镜像都会丢弃已在主服务器上确认的消息
队列镜像可提高可用性,但不会在节点之间分配负载(所有参与节点均完成所有工作)
主服务器的节点发生故障,则最早的镜像将被同步到新的主服务器
仲裁集群
3.8新出
RabbitMQ不允许您使用不同的参数重新定义现有队列,
工作模式
一个生产者一个消费者
不需要额外配置exchange(交换机)
分支主题
Work Queues
不需要额外配置exchange(交换机)
一个生产者对应多个消费者
竞争消费者模式
循环调度
默认:按顺序将消息发送给下一个消费者(平均分配)。
能者多劳调度
一次不要给一个worker发送一条以上的消息,在worker处理并确认前一个消息之前,不要向它发送新消息。
默认情况下,手动消息确认处于打开状态
确认必须在接收传递的同一通道上发送。尝试使用不同的通道进行确认将导致通道级协议异常。
Publish/Subscribe
交换机类型---fanout
可以有多个消费者
每个消费者都有自己的队列
消费者创建使用队列
每个队列都要绑定到交换机
消费者将队列绑定上交换机
生产者的消息只能发送到交换机
生产者创建使用交换机,消费者创建绑定交换机
交换机将消息发送给所有绑定过的队列
队列的消费者都能拿到消息,实现一条消息被多个消费者消费
Routing
交换机类型---direct
队列的绑定需要指定一个(routingKey)路由key
生产者发送消息时也需要指定routingkey
基于条件(路由键)的路由
消息发送到routingKey与消息的routingKey完全匹配的队列。
静态路由
Topics
交换机类型---topic
队列的绑定需要指定一个(routingKey)路由key
生产者发送消息时也需要指定routingkey
基于条件(路由键)的路由
消息发送到routingKey与消息的routingKey规则匹配的队列
动态路由
匹配规则
*只能代替一个单词。
#可以替代零个或多个单词。
RPC
RPC通信
不常用
Publisher Confirms
发布者确认(新特性)
0 条评论
下一页