rocketmq发送消息,保存消息,获取消息

在这里插入图片描述

上图是大概的流程.

发送消息

producer发送消息时从namesever获取该消息topic的所有messageQueue,从这些messageQueue中随机抽取一个发送.
当然也可以指定一个发送,这样可以保证消息的有序性,因为只有一个messageQueue保存了该topic下的所有消息,而且消费者消费的队列是固定的,但是如果消费者能力有限,那么会导致消息堆积,无法及时被消费.
broker接收到消息后会给producer一个确认,producer没接到确认的话会一直重复发送.

就算这个消费者宕机了,来接手这个messageQueue的新消费者也是从这个messageQueue一个一个取出来的,不用担心顺序会乱.

如果brokerA宕机了,就会出现顺序打乱的问题:
如果是主brokerA宕机,那么producerA发送消息时指定的messageQueue不存在了也就是无法连接了,那么producerA就会向另一个正常的brokerB的messageQueue发送消息,
此时宕机的主brokerA的从brokerA内还有未消费完的消息,还正常提供服务,而brokerB也开始为该topic提供服务,多个broker提供服务,顺序就会乱掉.
如果是从brokerA宕机,那么producerA正常向主brokerA发送消息,消费者从主brokerA也可以接受到消息.

保存消息

消息到了broker后,broker会将消息写入内存,并将消息同步给从broker,同步完成后返回一个ack(确认消息)给producer.
这里涉及到消息的刷盘机制以及主从同步机制,这里是主从同步更新后异步刷盘.

获取消息

消费者订阅topic,namesever给消费者绑定topic的messageQueue,每个消费者绑定一个或者多个messageQueue,而一个messageQueue只会绑定一个消费者.
消费者从messageQueue用pull的方式获取消息,将消息消费后返回ack(确认)给broker,那么这条消息就消费完成了.
如果ack由于网络原因传输失败,则会导致broker将消息重复传递,所以要确保消息的幂等性.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值