美文网首页
ActiveMQ&RocketMQ

ActiveMQ&RocketMQ

作者: 多关心老人 | 来源:发表于2021-02-03 16:18 被阅读0次

    ActiveMQ

    1. activemq admin 中的subject是指主题(1发N收),queue是队列(1发1收)。和rocketmq中的意思不一样。
    2. 如果想实现组播,可以用VirtualTopic。
    3. 如果想实现顺序消费,可以设置消费者线程数为1;或者在queue名字后面加上?consumer.exclusive=true。这样broker会把消息都发给一个consumer,直到这个consumer 下线再找另一个consumer发送。
    4. 也可以在message中设置property:JMSXGroupID, 相同的group会被同一个consumer线程消费。
    5. activemq admin中的number of consumers是线程数量(session数量),不是jvm实例数。
    6. 单机ActiveMQ的多线程消费吞吐量很高,达到4w tps.

    RocketMQ

    集群方式:

    1. 主从(1主1从),从机只是备份,不提供读写功能。主机挂了不能自动切到从机。 tps达到1w+。
    2. dledger集群(1主2从),使用dledger选主,从机也不提供读写功能,主机挂了能自动切到从机。tps在5k。

    broker集群分担topic的queue,提高tps.

    主从异步复制和异步刷盘是提高tps的手段。

    ActiveMQ分组的一些坑

    1. ?consumer.exclusive=true 只会有一个consumer消费,吞吐量很低,当然业务层可以使用粘滞线程池来提高并发,支持fail-over
    2. 使用JMSXGroupID的话,注意ActiveMQ默认只支持1024个group,超过了就会丢弃旧的group,保证不了顺序,支持fail-over + load balance,但是一个group一旦和consumer绑定就不会再rebalance,即添加新的consumer后,负载并不会自动调整。这样就可能造成如果一个consumer起的早,其他consumer起的晚,所有信息都会分配给第一个consumer。其他consumer空闲。可以通过consumersBeforeDispatchStarts 和 timeBeforeDispatchStarts 设置等待多少个consumer起来或多长时间后才分发消息。
      这点RocketMQ做的比较好,会根据consumer自动rebalance。

    ActiveMQ group和Selector的区别:group会自动分配consumer, selector是硬编码,生产者和消费者在代码里固定selector去过滤消息,类似于RocketMQ中的tag。

    参考:https://activemq.apache.org/message-groups

    相关文章

      网友评论

          本文标题:ActiveMQ&RocketMQ

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