MQ的优点:
解耦,消峰,数据分发
MQ的缺点:
系统的可用性降低,系统复杂度提高,数据一致性问题
window下rocketmq启动:
新增环境变量 ROCKETMQ_HOME="D:\rocketmq"
启动 mqnamesrv
再启动 mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
备注:RocketMQ默认的虚拟机内存比较大,编辑 runbroker.sh 和 runserver.sh 可以修改默认JVM大小
角色分类
Producer:消息的发送者;发信者
Consumer:消息接收者;收信者
Broker:暂存和传输消息;邮局
NameServer(无状态,无须同步):管理Broker;各个邮局的管理机构
Topic: 区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topoic 消息
Message Queue: 相当于是Topic的分区,用于并行发送和接收消息
集群工作流程:
1 启动NameServer,NameServer 起来后监听端口,等待 Broker,Producer,Consumer 连上来,相当于一个路由控制中心
2 Broker启动,跟所有的NameServer 保持长连接,定时发送心跳包,心跳包中包含当前Broker信息(ip+端口等)以及存储所有Topic信息,注册成功后,NameServer集群中就有Topic跟Broker的映射关系
3 收发消息前,先创建Topic,创建Topic时,需要指定该Topic 要存储在哪些Broker 上,也可以在发送消息时自动创建Topic
4 Producer 发送消息,启动时先跟NameServer 集群中的其中一台简历长连接,并从NameServer 中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息
5 Consumer跟Producer 类似,其中一台NameServer 建立长连接,获取当前订阅Topic存在哪些Broker 上,然后直接跟Broker建立连接通道,开始消费消息
集成客户端需要的 jar包
<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.4.0</version> </dependency>
消息发送者步骤分析:
1 创建消息生产者producer,并制定生产者名
2 制定nameserver 地址
3 启动producer
4 创建消息对象,制定主体topic,tag和消息体
5 发送消息
6 关闭生产者 producer
消息消费者步骤分析:
1 创建消费者consumer,指定消费者组名
2 指定 nameserver地址
3 订阅主题 topic 和tag
4 设置回调函数,处理消息
5 启动消费者consumer
消息发送
1 发送同步消息,发送给客户端后阻塞,直至客户端返回信息
2 发送异步消息用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应
3 不担心发送的结果,列如日志发送