RabbitMQ笔记
1、 简单队列模式simple:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列。也称为点对点模式。一条消息只能一个消费者消费。
2、 工作队列work:一个消息生产者,一个交换器,一个消息队列,多个消费者。同样也称为点对点模式。一条消息只能一个消费者消费。
3、 发布订阅publish/subscribe:无选择接收消息,一个消息生产者,一个交换器,多个消息队列,多个消费者。可以将消息发送给不同类型的消费者。做到发布一次,多个消费者来消费
4、 路由模式routing跟发布订阅模式类似,然后在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列
5、 主题模式:同样是在发布/订阅模式的基础上,根据主题匹配进行筛选是否接收消息,比第四类更灵活。
topics 主题模式跟 routing 路由模式类似,只不过路由模式是指定固定的路由键 routingKey,而主题模式是可以模糊匹配路由键 routingKey,类似于SQL中 = 和 like 的关系。
*代表一个单词
#代表一个或多个单词
6、 RPC模式:与上面其他5种所不同之处,类模式是拥有请求/回复的。也就是有响应的,上面5种都没有。用的比较少
7、 消息确认机制
生产者端:
7.1、事务方式实现保证消息正确发送出去,使用channel.TxSelect()来开启事务,最后channel.TxCommit()提交事务,这个只是在业务端确认发送出去了
7.2、普通confirm,这个是服务端确认接收是否成功,只返回true或者false
7.3、异步回调方式确认Ack(必须是路由模式才可以),可以返回具体的失败原因。
消费者端:
有自动签收、手动签收(建议)
8、 数据持久化,必须交换机、信道、队列都开启持久化
9、 消息优先级必须在消息队列有堆积时才起作用。
10、死信队列:一些因为过期、或者迟迟不被消费的消息重新进入死信队列。为正常的交换机、信道、队列绑定死信交换机、信道、队列
11、备份交换机、备份队列:给正常的交换机绑定一个备份交换机,那么没有发送成功的消息会进入备份队列。消费端可以先从正常队列取数据,取不到再去备份队列取。
12、延迟队列:不想马上被消费的消息进入延迟队列。
延时队列经常被用来处理订单超时取消问题。老版本的rabbitmq要指定两个交换机,消息发送时指定过期时间,因为第一个交换机不绑定队列消费,过期后转到第二个交换机。新版本有延时队列的插件,创建交换机时指定x-delayed-message
13、集群分为:普通集群(写消息时只写入某个节点,这个节点挂了后会丢数据)、镜像集群(每个节点有相同数据,但无法做到负载均衡)、高可用集群(HAProxy:负载均衡+keepalive:多个HAProxy热备切换)
14、一般生产者发送消息时,会在消息上带一个id,消费者根据这个id通过redis的setnx命令确保不会重复消费