RocketMQ的Consumer有两种消费模式,通过
consumer.setMessageModel(MessageModel.BROADCASTING)
和consumer.setMessageModel(MessageModel.CLUSTERING)
设置
广播模式
当使用广播消费模式时,MQ 会将每条消息推送给集群内所有订阅该topic和tag的客户端,保证消息至少被每台机器消费一次(若有多个集群都关注这个topic和tag,则每个集群的每个机器都消费一次)。
消息发送失败不会重投
消费进度由consumer维护,broker并不关心一条消息有没有消费成功
集群模式
该模式下,一条消息只要被关注该topic和tag的集群只消费一次就行(如果有多个集群(每个集群(group)里有多台机器)都关注了这个topic和tag,则每个集群都挑随机一个机器消费一次)。
消息失败会重投,但不保证重投到同一机器上
消费进度由broker维护
经实验表明
在集群模式下开多个consumer,发送时只有一个consumer会消费该消息,且每次启动producer时,消费消息多consumer可能不同
DefaultMQPushConsumer和DefaultMQPullConsumer
DefaultMQPushConsumer大部分控制直接由系统完成,大部分场景使用这种Consumer就行(其实上push的底层也是使用pull方式)
DefaultMQPullConsumer大部分功能由程序员自行配置
pull和push实际上是两个观察消息的角度。从Broker端观察就是往Consumer端推送消息,这时一切配置Broker都做好了,所以不需要我们做过多的配置。从Consumer端观察就是从Broker端拉取消息,所以各种拉取的配置都要我们自行配置。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/20585.html