1.RocketMQ简介

    RocketMQ是阿里巴巴中间件开发的分布式消息系统,曾经经历过很多阿里巴巴大型项目的实际检验。在去年已经正式捐献给Apache开源基金会,成为孵化项目。今年正式升级成为了apache的顶级项目。

    RocketMQ官网地址为:http://rocketmq.apache.org/,感兴趣的可以多多查看官网文档。
    2.准备工作
    2.1 安装环境
    本文所安装的RocketMQ为4.7.0版本,Linux系统版本为CentOS 7.2,安装目录为/opt。
    2.2 准备工具
    1.Java
    RocketMQ是使用Java开发的,所以需要在Linux系统内安装Java环境。
    java安装见:https://www.yuque.com/lingjun-nb4x6/xl5ra1/ivybxk
    2.Maven
    项目下载下来之后需要使用Maven编译,所以需要提前安装。
    maven安装见:https://www.yuque.com/lingjun-nb4x6/xl5ra1/cg17h2
    2.安装RocketMQ
    步骤大致分为如下几步:
    2.1 下载RocketMQ
    cd /opt
    wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.7.0.tar.gz

    2.2 解压文件
    tar -zxvf rocketmq-all-4.7.0.tar.gz

    2.3 编译项目
    cd rocketmq-rocketmq-all-4.7.0
    mvn -Prelease-all -DskipTests clean install -U

    2.4 进入启动目录
    cd /opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/bin
    其实这一步可以省略,可以在环境变量配置rocketmq全局变量,编辑/etc/profile加入如下代码:
    #for rocketMq
    export rocketmq=/opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
    export PATH=$PATH:$rocketmq/bin

    刷新配置:
    source /etc/profile

    2.5 启动Nameserver,其中/usr/local/logs/rocketmqlogs/mqnamesrv.log为RocketMQ日志文件
    #进入rocketMq目录
    cd /opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
    mkdir logs
    #启动RocketMq,并指定日志目录
    nohup sh mqnamesrv >/opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/logs/mqnamesrv.log 2>&1 &

    2.6 启动Broker
    nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true >/opt/rocketmq-rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/logs/broker.log 2>&1 &
    2.7 创建启动文件:
    vim mqnamesrv.sh
    vim mqbroker.sh
    chmod +x mq
    保存2.5* 2.6
    步启动脚本,下次直接执行脚本启动

    3.安装问题
    内存分配不够,修改runserver.sh和runbroker.sh两个文件的如下位置:
    10 Linux安装RocketMQ单机版 - 图1

    4.可视化管理页面安装
    可视化页面可以到GitHub上下载,下载位置:
    https://github.com/apache/rocketmq-externals
    百度网盘:链接: https://pan.baidu.com/s/1zcBAJFiYnFKmBQ2XgvNWjw 提取码: dc33
    图片.png
    拉取下来的是源码包,需要maven打包。
    图片.png
    使用命令编译,如下: mvn clean package -Dmaven.test.skip=true
    图片.png

    然后会生成rocketmq-console-ng-2.0.0.jar,
    图片.png
    直接运行即可:
    java -jar rocketmq-console-ng-2.0.0.jar —server.port=12581 —rocketmq.config.namesrvAddr=localhost:9876 &
    参数说明:
    —server.port为运行的这个web应用的端口,如果不设置的话默认为8080;
    —rocketmq.config.namesrvAddr为RocketMQ命名服务地址,如果不设置的话默认为“”。
    启动后监控页面如图所示
    10 Linux安装RocketMQ单机版 - 图6

    5 开发常见问题:
    问题1:
    No route info of this topic: testTopic
    常见原因:
    1-端口未开放,外部不可访问:
    开发端口
    2-防火墙未关闭:
    开放防火墙端口或临时关闭防火墙
    3-broker 禁止自动创建 Topic,并且也没有手动创建 Topic 的情况
    解决方案,最简单的方式就是在 broker 的配置文件或启动脚本中,新增自动创建 topic 的配置
    # 是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    # 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    但是这种方案在生产环境不是很建议,如果只是测试调试,这种方案是最简单的。另一种就是启动 broker 之后,手动创建 topic ,同样也可以解决
    问题2:
    安装 rocket mq 后,启动namesrver, broker 后,使用官方给出的例子,运行报错:sendDefaultImpl call timeout

    1. org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout
    2. at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:588)
    3. at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1223)
    4. at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1173)
    5. at org.apache.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:214)
    6. at com.flying.demo.Producer.main(Producer.java:25)

    解决方法:docker 的ip ,这块必须改成服务器的本机ip
    启动namesrver

    1. nohup sh bin/mqnamesrv -n "200.200.3.38:9876" &

    启动broker ,强制加上本机ip

    echo 'brokerIP1=200.200.3.38' > conf/broker.properties 
    nohup sh bin/mqbroker -n localhost:9876 -c conf/broker.properties autoCreateTopicEnable=true &
    

    再运行程序,不报错了