- 介绍
分布式消息队列是用来高效传输消息的。RocketMQ由四个部分组成。类比于邮政系统,邮政系统:由发件人,收件人,负责暂存和传输的邮局,和负责管理各个邮局的管理机构四个部分组成;RocketMQ相应地对应于Producer,Consumer,Broker和NameServer四部分组成。
Producer:消息生产者,负责产生消息,一般由业务系统负责产生消息
Consumer:消息消费者,负责消费消息,一般由后台系统负责异步消费
Broker:MQ消息服务器(中转消息,用于消息存储与生产消费转发)
NameServer:管理Broker,接受Broker的register和unregister
1.1 角色和概念
启动RocketMQ的顺序为先启动NameServer,后启动Broker,这时消息队列就可以提供服务了,生产者发送消息,消费者接收消息。
除了引子中提到的四个部分外,RocketMQ还有一些其他的概念:
Topic:将相同类型的消息分为一类,称为Topic,发送消息时即表明发送到哪个Topic
Message Queue:Topic内部设置多个Message Queue,以提高并行处理的效率
Push Consumer:Consumer的一种,需要向Consumer对象注册监听
Pull Consumer:Consumer的一种,需要主动请求Broker拉取消息
Producer Group:生产者集合,一般用于发送一类消息
Consumer Group:消费者集合,一般用于接收一类消息进行消费
1.2 源码结构
在apache rocketmq官网:http://rocketmq.apache.org/docs/quick-start/ 下载源码包后,可以看到结构如下: 其中:
rocketmq-broker:主要的业务逻辑,消息收发,主从同步
rocketmq-client:客户端接口,比如生产者和消费者
rocketmq-example:示例
rocketmq-common:公共的数据结构等
rocketmq-distribution: 编译模块,编译输出等
rocketmq-filter:进行Broker过滤不感兴趣的消息传输,减小带宽压力
rocketmq-logappender,rocketmq-logging:日志相关
rocketmq-namesrv: 用于服务协调
rocketmq-openmessaging:对外提供服务
rocketmq-remoting:远程调用接口,封装netty底层通信
rocketmq-srvutil:提供一些公用的工具方法,比如解析命令行参数
rocketmq-store:消息的存储
参照官网的quickstart进行编译:mvn -Prelease-all -DskipTests clean install -U,编译后就可以参照官网运行mq的nameserver和broker了。这里要注意的是:由于我的电脑是Mac,在/User/我的名字/目录下,产生了logs和stores两个新的文件夹。
1.3 常用命令
参照官网的quick start来做,首先启动nameserver,在安装路径下:/Users/yubuyun/Documents/workspace/rocketmq-all-4.3.2/distribution/target/apache-rocketmq
目录下执行下面的命令:
启动nameserver
nohup shbin/mqnamesrv &
tail -f~/logs/rocketmqlogs/namesrv.log
nohup shbin/mqbroker -nlocalhost:9876 &
tail -f~/logs/rocketmqlogs/broker.log
另外本地机器学习的时候注意,不玩了记得把broker和nameserver关掉,省得一直在后台运行服务:
shbin/mqshutdown broker
shbin/mqshutdown namesrv
publicstaticvoidmain