mq常见问题

1、优点

异步,削峰,解耦

 

2、缺点

1)稳定性变差,依赖mq,如果mq挂了就导致系统崩溃。

2)系统复杂性提高,要解决消息丢失、重复消费、顺序消费等问题。

3)一致性问题,A系统推送到三个消息由B、C、D去消费,BC成功,D失败,此时A认为已经成功了,一般用分布式锁来处理。

3、如何保证高可用

namserver配置集群

broker配置双主双从

 

4、消息丢失了怎么办?

分析三种情况:
1)生产者没有成功将消息推送到broker

2)消息推送到borker,然后broker宕机了,此时存在缓存中的消息丢失

3)消息由broker推送到消费者,但消费者没有成功消费这笔数据,但broker认为这笔数据已经消费,不会再重复推送了。

解决方案:

1)生产者消息发送到MQbroker后,MQ给生产者一个确认收到

2)MQbroker收到消息后,持久化这条数据

3)消费者成功消费信息后进行ack确认

4)MQ收到消费这ack确认后删除这条数据。

 

5、怎么保证消息不被重复消费

一般原因是网络延迟,导致MQ长时间没收到确认,然后重复又发了一笔消息

消息发送者发送消息时携带一个全局唯一id,消费者消费前先判断id是否在于reidis或者db有消费记录,如果没有则消费,并将消费记录存在库里 

 

6、怎么保证消息按照顺序消费

一个订单有订单创建,订单付款,订单完成,这个需要顺序消费,但是多个订单可以并行消费。(不会要求全局消费,因为)

解决:生产者根据每个订单id将同一个订单的三条信息放到一个Queue中,多个消费者同时获取queue中的消息进行消费,MQ使用分段锁保证单个订单三条消息的发送顺序消费的

Queue有序消费

生产者MessageQueueSelecter匿名内部类,消费者使用MessageListenerOrderly()匿名内部类

 

7、大量消息堆积怎么办

检查消费端是否正常,临时写代码将堆积的消息转存到容量更大的的MQ集群,增加多个消费者节点并行消费堆积信息,消费完毕后,恢复原始架构

 

8、消息过期了怎么办

1)发送者可以给消息定制一个时间,过期的消息放到死信队列,死信队列的消费者将消息放到数据库,然后从数据库再把这些数据重新查询出来发送到mq。

posted @ 2021-06-06 19:41  傲云萧雨  阅读(435)  评论(0编辑  收藏  举报