老师问一个关于MQ的问题

来源:9-12 分布式事务02-编码实现

微暖丶温情

2019-08-25

周老师:
假如RMQ集群突然宕机了(虽然高可用,但也可能全部宕机),消息会阻塞吗?消息多久丢弃,会等待多久?假如1秒钟消息就丢弃的话,这回引起宕机这段时间内,消息丢失,您工作中遇到过吗,怎么解决,需不需要,捕获异常落表,例如当RMQ连接不上异常时,将这条消息落库,然后等回复之后,再把宕机这段时间的消息,发出去?

写回答

2回答

大目

2019-08-25

而对于已经刷盘的消息,mq恢复后,是可以实现自动投递的。
在rmq的控制台,你甚至可以手动操作,人工投递。
这些特性建议看一下课上那个 rmq开发者指南哈
这样知识才会比较系统。
课程主要探讨的还是spring cloud stream编程模型,并不是rmq本身哈。

1
0

大目

2019-08-25

server端宕机恢复后,数据依然在的哈。
除非宕机瞬间,某条消息还没来得及刷入磁盘,消息才可能丢失。这种场景正常不会考虑的。
就和redis不考虑如果崩溃,数据还没来得及刷入磁盘一样。解决方案也是类似,可以缩短刷盘的间隔,一定程度上降低风险,不过带来的是性能开销。我个人认为正常业务这种极端场景不去考虑即可。
另外,不管你用事务消息,还是同步发送,都不会存在以上问题,因为消息没刷盘,就宕机的话,这条消息发送到mq不会成功,会报异常。
异步消息会有上面的问题,不过我认为都是可以容忍的。
其实,各大mq都有类似问题。

0
2
大目
回复
微暖丶温情
消息会阻塞吗?看你消息是怎么发送的;如果是异步发送,那可能丢失;如果是同步发送,那消息不会丢失,原因上面详细说了; 消息会阻塞吗?也是看你的发送方式,如果是异步发送,不会阻塞,如果是同步发送,会超时,然后报异常。 消息不会丢弃,会存储起来。如果哪一款MQ直接丢弃消息,这样的MQ你敢用吗? 消息丢失上面详细说了。
2019-08-26
共2条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3083 学习 · 1324 问题

查看课程