老师问一个关于MQ的问题
来源:9-12 分布式事务02-编码实现

微暖丶温情
2019-08-25
周老师:
假如RMQ集群突然宕机了(虽然高可用,但也可能全部宕机),消息会阻塞吗?消息多久丢弃,会等待多久?假如1秒钟消息就丢弃的话,这回引起宕机这段时间内,消息丢失,您工作中遇到过吗,怎么解决,需不需要,捕获异常落表,例如当RMQ连接不上异常时,将这条消息落库,然后等回复之后,再把宕机这段时间的消息,发出去?
写回答
2回答
-
大目
2019-08-25
而对于已经刷盘的消息,mq恢复后,是可以实现自动投递的。
在rmq的控制台,你甚至可以手动操作,人工投递。
这些特性建议看一下课上那个 rmq开发者指南哈
这样知识才会比较系统。
课程主要探讨的还是spring cloud stream编程模型,并不是rmq本身哈。10 -
大目
2019-08-25
server端宕机恢复后,数据依然在的哈。
除非宕机瞬间,某条消息还没来得及刷入磁盘,消息才可能丢失。这种场景正常不会考虑的。
就和redis不考虑如果崩溃,数据还没来得及刷入磁盘一样。解决方案也是类似,可以缩短刷盘的间隔,一定程度上降低风险,不过带来的是性能开销。我个人认为正常业务这种极端场景不去考虑即可。
另外,不管你用事务消息,还是同步发送,都不会存在以上问题,因为消息没刷盘,就宕机的话,这条消息发送到mq不会成功,会报异常。
异步消息会有上面的问题,不过我认为都是可以容忍的。
其实,各大mq都有类似问题。022019-08-26
相似问题