赞
踩
环境:
jdk 1.8
rocketMq 版本 4.5.1 rocketmq-all-4.5.1-bin-release.zip
附上链接,小伙伴自行下载
链接:https://pan.baidu.com/s/1zyzF3uZ3YN0YWzcLtkHC8A
提取码:gege
unzip rocketmq-all-4.5.1-bin-release.zip
mv rocketmq-all-4.5.1-bin-release.zip rocketmq
进入bin目录,输入
nohup ./mqnamesrv &
- 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的地址和端口号
关闭namesrv服务:sh bin/mqshutdown namesrv
./mqshutdown namesrv
关闭broker服务 :sh bin/mqshutdown broker
./mqshutdown broker
export NAMESRV_ADDR=localhost:9876 && ./tools.sh org.apache.rocketmq.example.quickstart.Consumer
启动报错:
上面报错是因为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}"
export NAMESRV_ADDR=localhost:9876 设置nameserver的地址 防止找不到
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
然后再次验证,应该已经可以使用了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。