搭建RocketMq(超详细,图文并茂)

环境:

jdk 1.8

rocketMq 版本 4.5.1 rocketmq-all-4.5.1-bin-release.zip

附上链接,小伙伴自行下载

链接:https://pan.baidu.com/s/1zyzF3uZ3YN0YWzcLtkHC8A 
提取码:gege 
 

1,拷贝到对应的文件夹

1.1 解压文件

unzip rocketmq-all-4.5.1-bin-release.zip

1.2 修改名称为rocketmq

mv rocketmq-all-4.5.1-bin-release.zip rocketmq

2,启动mq

2.1启动nameserver

进入bin目录,输入

nohup ./mqnamesrv &

2.2启动broker

nohup  sh mqbroker -n localhost:9876 > /app/soft/rocketMq/rocketmq/bin/log_broker.log 2>&1 &

#1、backupdb.log为日志保存输出的文件名称;
#2、2>&1表示不仅命令行正常的输出保存到backupdb.log中,产生错误信息的输出也保存到backupdb.log中;
#3、&表示该进程在后台运行;
#4、nohup表示进程在当用户注销(logout)或网络断开时不会被终止
#注意:若不指定输出日志文件,缺省会输出到nohup.out文件中.

-n 代表本机 nameserver的地址和端口号

2.3关闭服务

关闭namesrv服务:sh bin/mqshutdown namesrv

./mqshutdown namesrv

关闭broker服务 :sh bin/mqshutdown broker

./mqshutdown broker

3.测试

3.1测试消费端

 export NAMESRV_ADDR=localhost:9876 && ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

启动报错:

3.2修复错误

上面报错是因为rocket配置给的内存太大,虚拟机分配的内存太小导致。所以要修改bin目录下tools.sh,runserver.sh,runbroker.sh三个文件。

 vi runserver.sh,修改第一行,内存改小点。

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

#===========================================================================================
# JVM Configuration
#==========================================================================================
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log -XX:+PrintGCDetails"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT}  -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

 vi runbroker.sh,也是修改第一行,内存改小点。

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"


#===========================================================================================
# JVM Configuration
#==========================================================================================
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"

vi tools.sh

#===========================================================================================
# JVM Configuration
#===========================================================================================
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:PermSize=128m -XX:MaxPermSize=320m"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

3.3重新启动

export NAMESRV_ADDR=localhost:9876 设置nameserver的地址 防止找不到

3.4测试生产者

export NAMESRV_ADDR=localhost:9876 && ./tools.sh org.apache.rocketmq.example.quickstart.Producer

 发送了这么多条,可以看到消费端也开始打印

 完成

遇到的错误排查:

1,java启动producer

public class MyProducer {

    public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException, RemotingException, MQClientException, MQBrokerException {
        // 在实例化生产者的同时,指定了生产组名称
        DefaultMQProducer producer = new DefaultMQProducer("myproducer_grp_01");
        //设置超时时间
        producer.setSendMsgTimeout(150000);
        // 指定NameServer的地址
        producer.setNamesrvAddr("192.168.235.100:9876");
        // 对生产者进行初始化,然后就可以使用了
        producer.start();

        // 创建消息,第一个参数是主题名称,第二个参数是消息内容
        Message message = new Message(
                "tp_demo_01",
                "hello lagou 01".getBytes(RemotingHelper.DEFAULT_CHARSET)
        );
        // 发送消息
        final SendResult result = producer.send(message);
        System.out.println(result);

        // 关闭生产者
        producer.shutdown();
    }


}

 解决办法:

进入conf下面的broker.conf文件,并编辑

vim broker.conf

在conf文件中加入两行(建议直接复制,然后再修改为自己的IP),一定是大写IP!!!!!

namesrvAddr=127.0.0.1:9876
brokerIP1=192.168.200.130#是大写的IP一定要注意!!!修改成自己的IP地址!不能用localhost和127代替本机

1,一定要先启动namesrv,因为消息服务器是注册到命名服务器上的,不先启动命名服务器怎么注册

2,再启动消息服务器,同时指定刚刚修改过的conf文件,不然还是会读取原本默认的阿里外网IP,还是会报错。

./mqbroker -n localhost:9876 -c ../conf/broker.conf

启动成功如下图

2,出现MQClientException: No route info of this topic错误:

异常产生的原因可能是:

1,Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic

2,Broker没有正确连接到Name Server
3,Producer没有正确连接到Name Server 

首先解决1这种情况,启动顺序要先启动nameserver,再启动broker,启动broker时加上autoCreateTopicEnable=true 

./mqbroker -n localhost:9876 autoCreateTopicEnable=true 

解决2这种情况,启动没有异常检查下nameserver中是否成功注册了broker,有两种方式 
看broker的日志 如果出现形如
2018-02-28 16:21:35 INFO BrokerControllerScheduledThread1 - register broker to name server 192.168.192.129:9876 OK
2018-02-28 16:22:05 INFO BrokerControllerScheduledThread1 - register broker to name server 192.168.192.129:9876 OK
证明已经连接到nameserver上;

如果按前两步检查没有问题,但启动还是报错,那么剩下的可能原因是producer无法连接到nameserver,很可能是防火墙的原因 ,要检验猜测只需要关闭防火墙,命令为systemctl stop firewalld.service
然后再次验证,应该已经可以使用了。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值