1、官网
https://rocketmq.apache.org/docs/motivation/
2、对比
- ActiveMQ:Java -> ActiveMQ遵循JMS标准
- RacketMQ:Java -> RacketMQ没有实现JMS的接口,即不遵循JMS标准
- Kafka:Scala
- RabbitMQ:Erlang
3、作用
- 应用解耦
- 流量削峰
- 大数据处理
- 异构系统
4、选择RabbitMQ的原因?
- java编写,容易重写框架;
- 支持顺序消息、调度消息、事务消息、广播消息、延迟消息
5、架构
流程:
- 集群中所有角色都将自己注册到nameserver,并定期上报,过期剔除
- 消息生产者随机选择nameserver拉取topic的信息
- 消息生产者向提供topioc服务的Master建立长连接,发送消息
- 消息消费者随机选择nameserver拉取topic的信息
- 消息消费者向对应的Master或者Slave建立长轮训消费消息
注:
- master可以收发消息,slave只支持发。
- producer只能跟master连,consumer可以跟master、slave连。
- nameserver每个都是独立的,互不通信,满足AP,默认情况下不存注册信息,是无状态的。
6、Topic
- Topic是逻辑的,一个topic是多个queue(默认4个)组成,可以进行分片,分布在多个broker上。