美文网首页RocketMQ
三、RocketMQ几个重要的概念

三、RocketMQ几个重要的概念

作者: ASD_92f7 | 来源:发表于2019-04-11 11:09 被阅读29次

    参考资料:

        https://blog.csdn.net/adaihao_/article/details/54296639

        https://blog.csdn.net/qq924862077/article/details/84574455

    一、名词解释

        Name Server:作用类似于zookeeper之于kafka,主要做协调、心跳

        Broker:接受和分发消息的核心组件,也是RocketMQ的核心

        Message Model:消息消费方式,有两种

            Clustering(集群消费):MQ认为任意一条消息只要被集群中一个消费者消费掉即可

            Broadcasting(广播消费):MQ会推送给所有注册的消费者

    集群消费 广播消费

    消息细致类型:

        普通消息:爱怎么发怎么发,爱怎么接怎么接,反正没有顺序

        事务消息:经典的2PC提交

        顺序消息:你怎么发,我怎么接,有顺序的消息

        延迟消息:比如我们的订单,15分钟如果没有操作就会自动关闭订单,我觉得延迟消息可以做

    Producer:生产者,产生消息的主体

    Producer Group:

        生产者组,主要作用是标识一类生产者,并且,在事务类型的消息中,当一个生产者宕机的时候,组内其他的生产者可以顶上去

    Message:消息体

    不得不说,看了阿里的源码,Message这个类一行注释也没有,心塞。

    Message msg = new Message(topic,tags,keys,messagebody);

    消息中主要有四个参数:

    topic:主题

    tags:按照阿里官方的解释,是第二主题,子主题

    keys:消息关键词,据说是查找用的,后续学习到补充进来

    messagebody:具体的消息内容

    Consumer:消费者

    Consumer Group:消费者组,这个阿里比较有良心给了一段警告:

    Warning: consumer instances of a consumer group must have exactly the same topic subscription(s). 

    一个组内的消费者必须订阅同一个主题。 我的理解不仅Topic要一致,tags也必须一致,下面举个例子说一下

    这里有一个大坑,就是订阅一致性的问题,截止到目前,我的理解,可以试试下面这个例子:

         参考链接:https://www.jianshu.com/p/524ef06ce25a

        1、同一个组(Group1)内的两个消费者 (Consumer1、Consumer2),同时订阅主题(Topic1)

        2、Consumer1 订阅的tag为 A||B,Consumer2订阅的tag为 C

        3、先启动Consumer1,然后启动Producer发送 topic=Topic1,tag=A的数据(假定10条),Consumer1正常接收

        4、然后启动Consumer2,然后继续发送 topic=Topic1,tag=A的数据(假定10条),一条也收不到

        5、继续发送 topic=Topic1,tag=C的数据(假定10条),Consumer2只接收到了一部分(我这里稳定6条),关闭所有Consumer,然后启动Consumer2,这时候剩下的4条可以被接收到,很显而易见,这些消息并没有reject

       所以,以目前的知识水平,我认为,同一个Consumer Group中的消费者,不仅Topic必须一致,tags也必须一致,具体原因可以参考上面的链接,大致是因为RocketMQ会检索最后一个注册的Consumer的监听策略,之前的会失效。


    Queue:队列,这个有区别于ActiveMQ及JMS的定义,后续补充

    相关文章

      网友评论

        本文标题:三、RocketMQ几个重要的概念

        本文链接:https://www.haomeiwen.com/subject/xsmziqtx.html