RabbitMQ
消息队列有什么用
- 服务解耦
- 异步处理
-
三大组件
交换机 :消息代理服务器中用于把消息路由到队列的组件。
- 队列 :用于存储消息队列的数据结构,位于硬盘或内存中。
-
四种交换机
fanout exchange :把发送到该交换机的信息路由到所有与其绑定的队列中。
- direct exchange :把消息路由到RoutingKey完全匹配的队列中。
- topic exchange :在完全匹配的基础上增加通配符匹配规则,*代表一阶,#代表多阶。
-
如何保证消息的可靠性(即防丢失)
生产者-RabbitMQ :
- 事务机制(吞吐量低)
channel.txSelect() 用于开启事务
channel.txCommit() 用于提交事务
channel.txRollback() 用于回滚事务
执行步骤
1. 客户端(消息提供者)发送 Tx.Select 将信道设置为事务模式
1. Broker(服务器)回复 Tx.Select-OK 确认已将信道设置为事务模式
1. 发送消息
1. 客户端发送 Tx.Commit 提交事务
1. Broker(服务器)回复 Tx.Commit -OK 确认消息提交
- confirm机制 :
通过 confirm 机制发送的消息都会指定一个 deliveryTag(类似于id),发送后RabbitMQ会返回一个包含 deliveryTag 、 一个标志(ack/nack)、一个确认机制(true = 批量确认,false = 单挑确认)的消息
单条 confirm 模式 :发送一条等待确认一条,效率略高于事务
批量 confirm 模式 :发送多条后等待一条确认消息
异步 confirm 模式 :维护一个已发送消息的集合,当收到确认消息时从集合删除对应的消息