RocketMQ消息发送

当学习RocketMQ时,首先得将RocketMQ的消息发送分为3种方式:同步,异步和单向。

同步:发送者向 MQ 执行发送消息 API 时,同步等待, 直到消息服务器返回发送结果。

异步:发送者向MQ执行发送消息API时,指定消息发送成功后的回调函数,然后调用消息发送API后,

立即返回,消息发送者线程不阻塞,直到运行结束,消息发送成功或者失败的回调任务在一个新的线程中执行。

单向:单向很好理解,其实就是producer执行完send方法后,就直接返回,不需要等待broker的结果,

也不注册回调函数,只管发,不care消息能否真正成功存储broker中。

 

RocketMQ消息发送常常会考虑以下三点:

1.消息队列如何进行负载

2.消息发送如何实现高可用

3.批量消息发送如何实现一致性

 

针对问题1:

producer在发送消息时,如果本地路由表中未缓存topic的路由信息,则向nameserver发送获取理由信息请求,

更新本地路由信息表,并且消息生产者每隔30s从nameserver更新路由表。

针对问题2:

主要通过两个手段:重试机制 和 broker的规避。broker的规避主要就是在一次消息发送过程中发现错误,在某一时间段内

消息生产者不会选择该broker的消息队列,提高发送消息的成功率。

针对问题3:

MessageBatch extends Message ,MessageBatch内部持有List<Message> messages,这样处理流程与单条消息一样。

posted @ 2020-12-29 18:24  ligtto  阅读(145)  评论(0编辑  收藏  举报