RocketMQ是阿里开源的消息中间件, 支持分布式部署,具备高并发高可用的特性,总之很牛吧,对于他的详细介绍网上有不少,如今社区也算比较活跃了,就很少介绍(实际上是了解也不深刻,就不误人子弟了).html
这么厉害的中间件固然要去体验一番,学习学习, 而既然要学习使用,就先得部署了环境再说,因此就有了这篇安装步骤.git
16G内存云虚拟机,Centos7.2,16G内存,因为性能并不高,因此测试条件有限,可能会有所勘误,还请见谅.github
目前RocketMQ官方支持Centos和Alpine(很小巧的操做系统,用于制做docker镜像很适合)docker
默认系统中已经安装有docker, 没有安装的同窗请转到http://www.javashuo.com/article/p-xkomvfmu-cd.html安装一下先,通常来讲安装好后须要设置一下镜像加速,设置方法请查阅https://yq.aliyun.com/articles/29941apache
修改第50行左右为https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip,
这里要注意,若是你是从镜像站拷贝的连接,颇有可能拿到的URL协议名后面没有带":",好比这个清华的镜像开始是"http//",centos
保存文件,执行build-image.sh浏览器
这里的Version指rocketmq的版本,BaseImage指基础镜像,这里能够选centos或alpine,这里选择了centos,rocketmq版本4.5.0.
一顿输出以后,有以下提示则说明咱们的rocketmq镜像安装成功服务器
经过并发
docker images
查看能够看到有一个rocketmq镜像分布式
至此咱们的建立镜像就结束了
在本地建立MQ配置文件
配置文件主要就是broker的配置文件, 在这里建立了两个broker master以造成broker集群,因此配置了两个配置文件,分别为broker-a.conf和broker-b.conf
下面贴出配置文件
broker-a.conf
brokerClusterName = rocketmq-cluster brokerName = broker-a brokerId = 0 brokerIP1 = 你的服务器IP, 若是你要从外网发送接收消息,须要贴外网IP deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH namesrvAddr = ip1:9876;ip2:9877, autoCreateTopicEnable = true listenPort = 10911
broker-b.conf
brokerClusterName = rocketmq-cluster brokerName = broker-b brokerId = 0 brokerIP1 = ip deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH namesrvAddr = ip1:9876;ip2:9877 autoCreateTopicEnable = true listenPort = 10921
上面的namesrvAddr中,若是broker能用内网访问就贴内网IP, 并且通常broker访问nameserver都是经过内网.
在broker-b中, 须要修改的主要是brokerName,其余均可以保持一致,但listenPort须要跟后面docker-compose.yml中的ports匹配, docker-compose.yml在下面也会贴出来
version: '3.5' services: rmqnamesrv-a: image: rocketmqinc/rocketmq container_name: rmqnamesrv-a ports: - 9876:9876 volumes: - /opt/rocketmq/logs/nameserver-a:/opt/logs - /opt/rocketmq/store/nameserver-a:/opt/store command: sh mqnamesrv networks: rmq: aliases: - rmqnamesrv-a rmqnamesrv-b: image: rocketmqinc/rocketmq container_name: rmqnamesrv-b ports: - 9877:9876 volumes: - /opt/rocketmq/logs/nameserver-b:/opt/logs - /opt/rocketmq/store/nameserver-b:/opt/store command: sh mqnamesrv networks: rmq: aliases: - rmqnamesrv-b rmqbroker-a: image: rocketmqinc/rocketmq container_name: rmqbroker-a ports: - 10911:10911 - 10912:10912 volumes: - /opt/rocketmq/logs/broker-a:/opt/logs - /opt/rocketmq/store/broker-a:/opt/store - /etc/rocketmq/conf/broker-a.conf:/opt/rocketmq-4.5.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-a:9876" JAVA_OPTS: "-Duser.home=/opt" JAVA_OPT_EXT: "-Xms256m -Xmx256m" command: sh mqbroker -c /opt/rocketmq-4.5.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-a rmqbroker-b: image: rocketmqinc/rocketmq container_name: rmqbroker-b ports: - 10921:10921 - 10922:10922 volumes: - /opt/rocketmq/logs/broker-b:/opt/logs - /opt/rocketmq/store/broker-b:/opt/store - /etc/rocketmq/conf/broker-b.conf:/opt/rocketmq-4.5.0/conf/broker.conf environment: TZ: Asia/Shanghai NAMESRV_ADDR: "rmqnamesrv-b:9876" JAVA_OPTS: "-Duser.home=/opt" JAVA_OPT_EXT: "-Xms256m -Xmx256m" command: sh mqbroker -c /opt/rocketmq-4.5.0/conf/broker.conf autoCreateTopicEnable=true & links: - rmqnamesrv-a:rmqnamesrv-a - rmqnamesrv-b:rmqnamesrv-b networks: rmq: aliases: - rmqbroker-b rmqconsole: image: styletang/rocketmq-console-ng container_name: rmqconsole ports: - 9001:9001 environment: JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Dserver.port=9001" networks: rmq: aliases: - rmqconsole networks: rmq: aliases: - rmqbroker-b networks: rmq: name: rmq driver: bridge
NOTE: docker-compose.yml中的volumes对应的配置项中,本地目录应该先建立好,并配置好权限
docker-compose up
在docker-compose.yml所在目录执行上述代码,就能够启动整个服务.
在启动好之后,就能够经过浏览器进入控制台,访问地址为http://consoleIp:9001/.
这里的端口我配了9001,能够经过docker-compose.yml中的rmqconsole服务修改