RocketMQ

作者: isuntong | 来源:发表于2020-02-22 22:11 被阅读0次

    Message Queue

    常用:RocketMQ、RabbitMQ(金融)、ActiveMQ(Apache开源)、Kafka(日志读取解析存储)、ZeroMQ

    RabbitMQ:AMQP协议,接口复杂
    RocketMQ:自然java接口,简单,底层用的是Netty

    都支持JMS(java message service)

    想象成消息邮局

    应用场合:
    异步
    解耦
    削峰

    异步:
    前端-后端-数据库-后端-前端
    前端-MQ-前端 MQ-Consumer

    解耦:在两个系统中设置MQ,不用直接关联

    削峰:

    前端可以动静分离、缓存系统、负载均衡,但是数据库扛不住

    RocketMQ将消息放到内存和硬盘

    Redis主要用作缓存

    业务中台:微服务的聚合

    如交易中台:订单确认时调用多个微服务
    包括收获地址服务、产品服务、库存服务、优惠服务、积分服务、交易服务等等,相当于一个聚合层。

    营销中台、内容中台等等

    但是中台是强依赖,强耦合

    通过MQ解耦中台和下游服务


    kafka 单机百万并发,用在日志收集领域

    RocketMQ 单机50w tps,通过配置优化可以做到消息0丢失,但是不能保证消息重复消费

    RabbitMQ,性能较差<=10w tps,但是社区活跃,会与消息丢失

    ActiveMQ,传统公司可能用,性能差

    RocketMQ特性:

    订单超过一定时间未支付取消订单。

    1. 定时任务扫描:

    把当前时间-创建时间>15min订单取消

    但是扫描时延很长

    1. Redis通过发布和订阅进行失效key事件的发布

    但是不管收没收到,都只会发一次,存在订单不能被取消的可能

    Redis工作模式为单线程,key大量失效工作不过来

    service集群的话所有客户端都会收到失效消息,然后重复更新,所以需要分布式锁了。。。

    1. RocketMQ

    保证消息不丢失,消息至少被投递一次。(ACK机制)

    RocketMQ 延时消息,延迟队列,是其他队列不支持的。(放到中转队列,时间到了再投递到队列)

    18个级别的延迟队列,
    时间:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

    延迟队列弊端:

    延迟会有,延迟消息过多,消息积压,导致高延迟(开源MQ)

    消息转运:从中转到投递只有一个线程搬运

    想要支持秒级别任意时间延迟队列怎么做?开源版办不到

    但是RocketMQ可定制,美团,滴滴等都有自己的定制。

    相关文章

      网友评论

          本文标题:RocketMQ

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