rocketmq—消息队列
优点
- 系统解耦
- 流量削峰
- 消息分发
缺点
- 系统可用性降低—高可用
- 系统复杂度提高—重复消费,消息丢失,消息顺序
- 一致性问题—a和b处理成功,c处理失败怎么处理
安装及启动
- 下载bin安装包
- 解压至/usr/local
- 进入bin目录,执行
nohup sh mqnamesrv &
- 查看启动日志
vi ~/logs/rocketmqlogs/namesrv.log
- 修改runbroker.sh
-Xms256m -Xmx256m -Xmn128m
- 启动broker
nohup sh mqbroker -n localhost:9876 &
- 查看启动日志
vi ~/logs/rocketmqlogs/broker.log
测试
- 执行jps 查看server和broker是否启动
- 开启两个窗口,在两个窗口都设置以下环境变量:
export NAMESRV_ADDR=localhost:9876
- 一个窗口作为生产端:
sh tools.sh org.apache.rocketmq.quickstart.Producer
- 一个窗口作为消费端:
sh tools.sh org.apache.rocketmq.quickstart.Consumer
可以看到消费端执行完毕后不会停止,依然在继续监听,此时执行生产端命令后消费端会继续消费消息。
集群角色
Producer:生产者
Consumer:消费者
Broker:暂存和传递消息
Nameserver:管理broker
Topic:区分消息的种类;一个生产者可以发给一个或多个topic,一个消费者可以订阅一个或多个topic
MessageQueue:相当于topic的分区;用于并行发送和接收消息
集群特点
nameserver是无状态的,broker会给所有nameserver发信息。
consumer与nameserver集群中的一个节点建立长连接,定期从中取topic路由信息,并向提供topic服务的master、slave建立长连接,且定时向master、slave发送心跳。consumer无状态。
producer与nameserver集群中的一个节点建立长连接,定期从中取topic路由信息,并向提供topic服务的master建立长连接,且定时向master发送心跳。produce无状态。
broker分主从,主写从读。一个master可以对应多个slave,一个slave只能对应一个master。通过相同Brokername分辨broker和slave之间的对应关系,