请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师问一个关于MQ的问题

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

正在回答 回答被采纳积分+3

2回答

大目 2019-08-25 23:16:59

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

0 回复 有任何疑惑可以回复我~
大目 2019-08-25 23:14:15

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

0 回复 有任何疑惑可以回复我~
  • 提问者 活在当下Vv #1
    假如生产上有一个联机服务,注册之后,发送优惠券,发送优惠券,是调用MQ操作,目前要求,发送优惠券逻辑,不能影响注册,这样的话,假如RMQ集群突然宕机了(虽然高可用,但也可能全部宕机),消息会阻塞吗?消息多久丢弃,会等待多久?假如1秒钟消息就丢弃的话,这回引起宕机这段时间内,消息丢失,您工作中遇到过吗,怎么解决,需不需要,捕获异常落表,例如当RMQ连接不上异常时,将这条消息落库,然后等回复之后,再把宕机这段时间的消息,发出去?
    回复 有任何疑惑可以回复我~ 2019-08-26 10:05:45
  • 大目 回复 提问者 活在当下Vv #2
    消息会阻塞吗?看你消息是怎么发送的;如果是异步发送,那可能丢失;如果是同步发送,那消息不会丢失,原因上面详细说了;
    消息会阻塞吗?也是看你的发送方式,如果是异步发送,不会阻塞,如果是同步发送,会超时,然后报异常。
    
    消息不会丢弃,会存储起来。如果哪一款MQ直接丢弃消息,这样的MQ你敢用吗?
    
    消息丢失上面详细说了。
    回复 有任何疑惑可以回复我~ 2019-08-26 10:52:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信