概念性问题
队列(queue): 是RabbitMQ的内部对象,用于存储消息。
交换机(exchange):消息首先到达的是交换机而不是队列。
routing key : 消息到交换机的一个路由规则。
binding key : 交换机绑定队列的关系。
Exchange Types(交换机路由的4个规则)
fanout:会发送到绑定exchange的所有队列
direct: 只有routing key 和 binding key 完全匹配才会发给队列
topic:有匹配规则的表达式 (. * # )
headers: 根据发送消息中的headers进行匹配
遇到哪些问题?如何解决
问:消费者重启后会重复消费一些消息并重复执行业务逻辑
答:发送给mq后,mq需要收到回执才会把对应的队列删掉
问:宕机了怎么办
答:把message和queue都设置成持久化的,可以保证大部分信息不回丢失。如果rabbitmq服务器已经接收到生产者的消息了,但没来得及持久化就断电了,需要用到事务。
问:rabbitmq的事务?
答:太耗费性能,就不考虑了,跟spring的事务很相近,事务针对信道 channel
为什么要用rabbitmq
-
适用于高并发
-
支持持久化
-
可靠性
用在什么地方
日志
下单->减库存
抢购
消息提醒