rocketmq简介

背景

  • 互联网应用拆分为微服务、解决各个微服务模块的互相通信问题、并能够提供大流量技术支撑

{———-}

应用场景

  • 微服务之间的通信问题
    • 具体的业务场景有很多、比如、支付完成后的订单状态修改、用户充值后的vip等级提升、物流信息等等
    • 各个微服务之间的消息、业务场景有:按实时性可分为实时消息、非实时消息;

组成部件

  • rocketmq 有两个部件 nameserver:服务管理中心、broker:消息存储中心
    • nameserver管理业务服务注册、保证服务稳定运行
    • broker负责消息的持久化、保证消息不丢失

解决问题

  • 应用解耦
    • 替换应用上的https协议、又能保证服务之间的动态性
  • 流量削峰
    • 非即时消息、延后处理
  • 消息分发
    • 消息生产者只负责消息生产、消息消费者只负责消息消费、只管把消息发到消息队列、而不关心、哪台服务消费这个消息
    • 消息轮询消费、不会造成只在某一台机器上消费、压跨服务器
  • 保证分布式事务的最终一致性
  • 动态扩容

发展

  • 目前已是apache的顶级项目、
  • 2017年双十一的主要驱动力、处理消息万亿级别、tps:5600万
  • java语言开发、对java开发者亲和度较高

技术选型

  • rocketmq、rabbitmq、kafka

    • 没有谁好谁坏
    • kafka起源最早、解决消息流处理问题、最早解决监控平台对各个服务模块的消息监控、
    • rabbitmq、采用AMQP协议开发、建立了最早的消息模型、定义了消息驱动模式、
    • rocketmq、类似于kafka、不过语言是java、经历了阿里的双十一足以证明它的性能。
  • 个人见解

    • 吞吐量优先、消息丢失小事、选择kafka、kafka的吞吐量要强一个量级
    • 稳定不丢消息:rocketmq、tabbitmq、
    • rabbitmq底层是erlang语言、erlang语言特性、并发性能优秀、
    • rocketmq底层netty、异步机制优秀
    • 实时性要求高、同时又要求高的吞吐量 rabbitmq
    • 非实时性要求高、同时又要求高吞吐量 rocketmq