RocketMQ是什么
是由阿里捐赠给Apache的一款分布式、队列模型的开源消息中间件,经历了双十一的洗礼。
RocketMQ的发展史
RocketMQ的特性
- 原生分布式
- 两种消息拉取
- 严格消息顺序
- 特有的分布式协调器
- 亿级消息堆积
- 组(group)
RocketMQ 基本概念
producer:
消息生产者,负责生产消息,一般有业务系统负责生产消息。
consumer:
消息消费者,负责消费消息,一般是后台系统负责异步消费。
push consumer:
封装消息拉取,消费进程和内部
pull consumer:
主动拉取消息,一旦拉取到消息,应用的消费进程进行初始化。
producer group:
一类producer的集合名称,这类producer通常发送这一类消息,且发送逻辑一致。
consumer group:
一类consumer的集合名称,这类consumer通常消费这一类消息,且消费逻辑一致。
Broker:
消息中转角色,负责存储消息、发送消息,这里就是RocketMQ Server。
Topic:
消息的主题,在服务端定义和配置,消费者可以按照主题进行订阅,也就是消息分类,通常一个系统一个topic。
Message:
在生产者、消费者、服务器之间传递的消息,一个message必属于一个topic。
namesrv:
一个无状态的名称服务,可以集群部署,每一个broker启动的时候都会向名称服务器注册,要是接受broker的注册,接受客户端的路由请求并返回路由信息。
offset:
偏移量,消费者拉取消息时,需要知道上一次消费到了什么位置,这一次从哪里开始。
partition:
分区,topic物理上的分组,一个topic可以分为多个分区,每个分区就是一个有序的队列。分区中的 每条消息都会分配给一个有序的id,即偏移量。
tag:
用于对消息进行过滤,理解为message的标记,同一业务不同目的的message可以用相同的topic,但是可以用tag来区分。
key:
消息的key字段是为了唯一表示消息,方便查问题,不是说必须设置,设置了可以方便开发和运维定位问题。比如,这个key可以是订单id等。
环境准备
centos7 jdk1.8
下载 RocketMQ
使用前面复制的地址下载:
wget http://mirros.shu.edn.cn/apache/rocketmq/4.3.2/rocket-all-4.3.2-bin-release.zip
解压:
unzip -d /usr/rocketmq-all-4.3.2-bin-release.zip
mv /usr/rocketmq-all-4.3.2-bin-release /usr/rocketmq
启动nameServer:
nohup sh bin/mqnamesrv > ~/logs/rocketmqlogs/namesrv.log 2>&1 &
启动broker
nohup sh bin/mqbroker -n localhost:9876 > ~/logs/rocketmqlogs/broker.log 2>&! &
停止 broker
bin/mqshutdown broker
停止 nameServer
bin/mqshutdown namesrv
验证是否启动成功
发送消息:
export NAMESRV_ADDR=localhost:9876
bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
接收消息:
bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
RocketMQ客户端