exception:
com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, yunlian-truck-websocket-test
See https://github.com/alibaba/RocketMQ/issues/44 for further details.
at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:587)
at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1031)
at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1025)
at com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:95)
at com.alibaba.rocketmq.client.producer.DefaultMQProducer$$FastClassBySpringCGLIB$$1b510147.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:97)
at com.sinochem.yunlian.truck.common.interceptor.MessageProducerInterceptor.Interceptor(MessageProducerInterceptor.java:52)
at sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629)
原因1:Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic
查看是否允许自动创建topic
#启动./mqbroker -n 127.0.0.1:9876 -p -p是查看配置信息
./mqbroker -n localhost:9876 -p
mq开启自动创建topic参数
方法1: 命令行方式,开启自动创建topic参数
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
方法2: 配置文件中,设置 autoCreateTopicEnable=true,配置文件位置:/安装目录/congf
注意启动的时候,根据brokerName,启动不同的配置文件。
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样 例如:在a.properties 文件中写 broker-a 在b.properties 文件中写 broker-b
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
原因2:Broker 没有正确连接到 Name Server
查看broker.log日志
位置: /安装目录/conf/logback_broker.xml中日志位置
日志信息:broker.log
日志信息:namesrv.log
原因3:Producer 没有正确连接到 Name Server ,防火墙未关闭,导致Producer无法连接到 Name Server
查看防火墙状态
# 查看防火墙状态
systemctl status firewalld
# 打开防火墙,重启后不生效
systemctl start firewalld
#关闭防火墙,重启后不生效
systemctl stop firewalld
# 打开防火墙,重启后也生效
systemctl enable firewalld
#关闭防火墙,重启后不生效
systemctl disable firewalld
防火墙打开状态: active(running)
防火墙关闭状态: active(dead)
防火墙不能关闭,开启RocketMQ指定端口,添加端口后,记得 reload
# 查看防火墙,开放的端口号
firewall-cmd --zone=public --list-ports
# 防火墙为某个端口开放权限,添加首记得重心加载配置
firewall-cmd --zone=public --add-port=80/tcp --permanent
#重新加载防火墙配置
firewall-cmd --reload
原因4:mq的启动顺序不对(或未启动nameserver只启动了broker),需先启动nameserver,再启动broker
#nameserver启动命令
nohup sh mqnamesrv >/usr/local/rocketmq/logs/ns.log &
#broker启动命令,根据不同slave端的brokerName启动不同的配置文件
nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties > ../logs/mqbroker-a.log 2>&1 &
nohup sh mqbroker -c ../conf/2m-noslave/broker-b.properties > ../logs/mqbroker-b.log 2>&1 &
原因5:rocketmq的版本和rocketmq client的版本不一致导致
使用的rocketmq的版本是4.3.0,java client端版本不对
rocketmq 的 4.3.0版本的自动创建(autoCreateTopicEnable),客户端传递使用的AUTO_CREATE_TOPIC_KEY_TOPIC是”AUTO_CREATE_TOPIC_KEY”
而使用旧版本的client,客户端传递的默认AUTO_CREATE_TOPIC_KEY_TOPIC是“TBW102”
因此,需检查两者的版本是否能对上
替换client的版本
org.apache.rocketmq
rocketmq-client
4.3.0
或者修改以下的值
1)查看topicList
sh mqadmin topicList –n localhost:9876
2)查看配置信息
./mqbroker -n localhost:9876 -p
3)查看mq集群状态
sh mqadmin clusterList -n localhost:9876
4)查看topic路由信息
sh mqadmin topicRoute –n localhost:9876 -t yunlian-truck-message-test
5)查看nameserver hosts 配置
vi /etc/hosts
1)查看连接信息
Connection→ConsumerConnection
2)查看消息是否有积压
Consumer→ConsumerProgress,
只有consumer有积压概念,Diff 单个broker的挤压数,Diff Total 是总的挤压数