当前位置:   article > 正文

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

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

  1. nohup sh mqbroker -n localhost:9876 > /app/soft/rocketMq/rocketmq/bin/log_broker.log 2>&1 &
  2. #1、backupdb.log为日志保存输出的文件名称;
  3. #22>&1表示不仅命令行正常的输出保存到backupdb.log中,产生错误信息的输出也保存到backupdb.log中;
  4. #3&表示该进程在后台运行;
  5. #4、nohup表示进程在当用户注销(logout)或网络断开时不会被终止
  6. #注意:若不指定输出日志文件,缺省会输出到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"

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

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

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

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

vi tools.sh

  1. #===========================================================================================
  2. # JVM Configuration
  3. #===========================================================================================
  4. JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:PermSize=128m -XX:MaxPermSize=320m"
  5. JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre/lib/ext"
  6. 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

  1. public class MyProducer {
  2. public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException, RemotingException, MQClientException, MQBrokerException {
  3. // 在实例化生产者的同时,指定了生产组名称
  4. DefaultMQProducer producer = new DefaultMQProducer("myproducer_grp_01");
  5. //设置超时时间
  6. producer.setSendMsgTimeout(150000);
  7. // 指定NameServer的地址
  8. producer.setNamesrvAddr("192.168.235.100:9876");
  9. // 对生产者进行初始化,然后就可以使用了
  10. producer.start();
  11. // 创建消息,第一个参数是主题名称,第二个参数是消息内容
  12. Message message = new Message(
  13. "tp_demo_01",
  14. "hello lagou 01".getBytes(RemotingHelper.DEFAULT_CHARSET)
  15. );
  16. // 发送消息
  17. final SendResult result = producer.send(message);
  18. System.out.println(result);
  19. // 关闭生产者
  20. producer.shutdown();
  21. }
  22. }

 解决办法:

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

vim broker.conf

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

  1. namesrvAddr=127.0.0.1:9876
  2. 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
然后再次验证,应该已经可以使用了。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号