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服務修改