目录:
1.rabbitmq好处:
2.应用场景:
3.交换机类型:
4.消息基于什么进行传输:
5.如何确保消息正确的发送:
6.如何确保接收方消费了消息:
7.如何避免消息重复投递和重复消费:
8.如何确保数据不被丢失:
1.rabbitmq好处:
1.流量削峰:避免大流量时,所有请求都同时操作数据库。数据库io是十分消耗资源的。
2.应用解耦:应用a需要对应用b进行操作,例如订单的下单后的减库存操作。库存应用宕机后,避免因为库存应用的宕机,而导致操作报错。
3.异步处理:避免串行操作,例如某个操作需要发送系统消息和发送短信的操作不应该串行,而是同时进行,加快响应。
2.应用场景:
1.简单队列:
一个生产者------消息队列-----一个消费者
2.工作队列:
一个生产者-----消息队列------多个消费者
轮询:按照消息的先后依次分发给消费者
公平分发:不会平均分发,而是谁有空就谁消费
3.发布者订阅模式:
一个生产者---交换机----多个队列----队列对应的消费者
交换机没有存储数据的能力,队列才有,所以交换机需要绑定队列,交换机接收到生产者的数据,推送给队列。
4.topic主题模式:
主要交换机有路由键的存在,将路由键和队列进行绑定,发送消息时,指定路由键的内容,发送给绑定的队列即可。
3.交换机类型:
1.fanout:当有消息时,把消息发送给所有队列。
2.topic:有路由键,将路由键和队列进行绑定。
3.direct和header:这两个不常用。
4.消息基于什么进行传输:
由于tcp创建和销毁开销大,所以消息一般基于信道传输。
信道是基于tcp连接的虚拟连接,一个tcp连接可以包含很多个信道。
5.如何确保消息正确的发送:
rabbitmq采用发送方确认的模式,确保消息正确的发送到rabbitmq。
发送方确认模式:一旦消息到达队列后,会给发送方一个确认的信息。而rabbitmq内部错误没有接收到时,会给发送发一个未确认的信息。
6.如何确保接收方消费了消息:
rabbitmq采用接收方确认模式。
每一条消息都会被接收方确认,一旦确认消费了消息,rabbitmq才会将消息从队列中删除。
7.如何避免消息重复投递和重复消费:
生产者每发送一条消息都会生产一个内部消息id,防止重复投递。
当消费者消费时,每条消费的信息都有一个全局id,防止被重复消费。
8.如何确保数据不被丢失:
生产者不丢失数据:
rabbitmq采用transaction和confirm来确保消息不被丢失。
消息队列不丢失数据:
一般采用持久化磁盘的操作。
消费者不丢失数据:
采用消费确认模式。
9.消息队列的缺点:
1.系统复杂性增加。