RocketMQ 常见异常处理 淡淡的烟草味﹌ 2022-05-05 14:28 1578阅读 0赞 # MQClientException: No route info of this topic, TopicTest1 # ## 异常说明 ## * 在客户端的 Producer 运行起来准备发送消息时抛异常如下 * “ No route info of this topic ” 异常产生的原因可能是,自己当时的原因恰好是第三条: 1. Broker 禁止自动创建 Topic,且用户没有通过手工方式创建 Topic 2. Broker 没有正确连接到 Name Server 3. Producer 没有正确连接到 Name Server 17: 28: 23.123 [main] DEBUG i.n.u.i.l. InternalLoggerFactory - Using SLF4J as the default logging framework org.apache.rocketmq.client.exception. MQClientException: No route info of this topic, TopicTest1 See http: //rocketmq.apache.org/docs/faq/ for further details. at org.apache.rocketmq.client.impl.producer. DefaultMQProducerImpl.sendDefaultImpl( DefaultMQProducerImpl.java: 610) 17: 28: 29.595 [ NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address[] result: true at org.apache.rocketmq.client.impl.producer. DefaultMQProducerImpl.send( DefaultMQProducerImpl.java: 1223) at org.apache.rocketmq.client.impl.producer. DefaultMQProducerImpl.send( DefaultMQProducerImpl.java: 1173) at org.apache.rocketmq.client.producer. DefaultMQProducer.send( DefaultMQProducer.java: 214) at com.lct.quickstart. Producer.main( Producer.java: 56) at sun. reflect. NativeMethodAccessorImpl.invoke0( Native Method) at sun. reflect. NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java: 62) at sun. reflect. DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java: 43) at java.lang. reflect. Method.invoke( Method.java: 498) at com.intellij.rt.execution.application. AppMain.main( AppMain.java: 140) ## 解决办法 ## * 排查1:Broker 禁止自动创建 Topic,且用户没有通过手工方式创建 Topic: * 可以在 Rocket\_HOME/distribution/target/apache-rocketmq 下执行 " sh bin/mqbroker -m " 来查看 broker 的配置参数 * 如下所示,autoCreateTopicEnable=true 证明是没有问题的 [ root@localhost apache-rocketmq] # sh ./bin/mqbroker -m 2018 -08 -12 01\: 27\: 28 INFO main - namesrvAddr= 2018 -08 -12 01\: 27\: 28 INFO main - brokerIP1= 192.168 .58 .129 2018 -08 -12 01\: 27\: 28 INFO main - brokerName=localhost.localdomain 2018 -08 -12 01\: 27\: 28 INFO main - brokerClusterName=DefaultCluster 2018 -08 -12 01\: 27\: 28 INFO main - brokerId= 0 2018 -08 -12 01\: 27\: 28 INFO main - autoCreateTopicEnable= true 2018 -08 -12 01\: 27\: 28 INFO main - autoCreateSubscriptionGroup= true 2018 -08 -12 01\: 27\: 28 INFO main - rejectTransactionMessage= false 2018 -08 -12 01\: 27\: 28 INFO main - fetchNamesrvAddrByAddressServer= false 2018 -08 -12 01\: 27\: 28 INFO main - transactionTimeOut= 3000 2018 -08 -12 01\: 27\: 28 INFO main - transactionCheckMax= 5 2018 -08 -12 01\: 27\: 28 INFO main - transactionCheckInterval= 60000 2018 -08 -12 01\: 27\: 28 INFO main - storePathRootDir=/root/store 2018 -08 -12 01\: 27\: 28 INFO main - storePathCommitLog=/root/store/commitlog 2018 -08 -12 01\: 27\: 28 INFO main - flushIntervalCommitLog= 500 2018 -08 -12 01\: 27\: 28 INFO main - commitIntervalCommitLog= 200 2018 -08 -12 01\: 27\: 28 INFO main - flushCommitLogTimed= false 2018 -08 -12 01\: 27\: 28 INFO main - deleteWhen= 04 2018 -08 -12 01\: 27\: 28 INFO main - fileReservedTime= 72 2018 -08 -12 01\: 27\: 28 INFO main - maxTransferBytesOnMessageInMemory= 262144 2018 -08 -12 01\: 27\: 28 INFO main - maxTransferCountOnMessageInMemory= 32 2018 -08 -12 01\: 27\: 28 INFO main - maxTransferBytesOnMessageInDisk= 65536 2018 -08 -12 01\: 27\: 28 INFO main - maxTransferCountOnMessageInDisk= 8 2018 -08 -12 01\: 27\: 28 INFO main - accessMessageInMemoryMaxRatio= 40 2018 -08 -12 01\: 27\: 28 INFO main - messageIndexEnable= true 2018 -08 -12 01\: 27\: 28 INFO main - messageIndexSafe= false 2018 -08 -12 01\: 27\: 28 INFO main - haMasterAddress= 2018 -08 -12 01\: 27\: 28 INFO main - brokerRole=ASYNC_MASTER 2018 -08 -12 01\: 27\: 28 INFO main - flushDiskType=ASYNC_FLUSH 2018 -08 -12 01\: 27\: 28 INFO main - cleanFileForciblyEnable= true 2018 -08 -12 01\: 27\: 28 INFO main - transientStorePoolEnable= false [ root@localhost apache-rocketmq] # * 排查2:Broker 没有正确连接到 Name Server * 如下所示,启动 broker 的时候,只要看到了 The broker\[localhost.localdomain, 192.168.58.129:10911\] boot success. serializeType=JSON and name server is localhost:9876 字样就说明是成功的 [root@localhost apache-rocketmq]# nohup sh bin/mqbroker -n localhost: 9876 & [ 2] 3256 [ 1] 退出 143 nohup sh bin/mqbroker -n localhost: 9876 [root@localhost apache-rocketmq]# nohup: 忽略输入并把输出追加到 "nohup.out" tail -f ~/logs/rocketmqlogs/broker. log 2018 -08 -11 23: 48: 26 INFO main - load exist subscription group, SubscriptionGroupConfig [groupName=CID_ONSAPI_OWNER, consumeEnable= true, consumeFromMinEnable= true, consumeBroadcastEnable= true, retryQueueNums= 1, retryMaxTimes= 16, brokerId= 2018 -08 -11 23: 48: 31 WARN main - Load default discard message hook service: DefaultTransactionalMessageCheckListener 2018 -08 -11 23: 48: 31 INFO FileWatchService - FileWatchService service started 2018 -08 -11 23: 48: 31 INFO PullRequestHoldService - PullRequestHoldService service started 2018 -08 -11 23: 48: 31 INFO brokerOutApi_thread_1 - register broker to name server localhost: 9876 OK 2018 -08 -11 23: 48: 31 INFO main - Start transaction service! 2018 -08 -11 23: 48: 31 INFO main - The broker[localhost.localdomain, 192.168 .58 .129: 10911] boot success. serializeType=JSON and name server is localhost: 9876 2018 -08 -11 23: 48: 41 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes 2018 -08 -11 23: 48: 41 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 906412 bytes 2018 -08 -11 23: 48: 41 INFO brokerOutApi_thread_2 - register broker to name server localhost: 9876 OK * 排查3:Producer 没有正确连接到 Name Server * 当时一时糊涂 Linux 上开启了 Broker 端口是 9876,然后自己并没有在防护墙中开启此端口,所以导致客户端 Producer 无论如何也连接不上 * 如下所示,命令分别含义是: 1. 查看防护墙开放的端口,此时没有 9876 2. 设置防火墙开放9876 端口 3. 重新加载 firewall,修改配置后,必须重新加载才能生效:firewall-cmd --reload 4. 再次查看防火墙开放的端口,此时已有 9876 [root@localhost apache-rocketmq] # firewall-cmd --zone=public --list-ports 8090/tcp 80/tcp 8080/tcp [root@localhost apache-rocketmq] # firewall-cmd --zone=public --add-port=9876/tcp --permanent success [root@localhost apache-rocketmq] # firewall-cmd --reload success [root@localhost apache-rocketmq] # firewall-cmd --zone=public --list-ports 9876/tcp 8090/tcp 80/tcp 8080/tcp [root@localhost apache-rocketmq] # # RemotingTooMuchRequestException: sendDefaultImpl call timeout # ## 异常说明 ## * 在客户端的 Producer 运行起来准备发送消息时抛异常如下 * 因为使用的是虚拟机,设置内存也只有1G,所以从 Windows 上开发连接 虚拟机中的 nameServer 时要经过 Linux 系统的防火墙,而防火墙一般都会有超时的机制,在网络连接长时间不传输数据时,会关闭这个 TCP 的会话,关闭后再读写,就有可能导致这个异常。 16 :22 :37.403 [main] DEBUG i .n .u .i .l .InternalLoggerFactory - Using SLF4J as the default logging framework 16 :22 :40.994 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address [] result: true Exception in thread " main" org .apache .rocketmq .remoting .exception .RemotingTooMuchRequestException: sendDefaultImpl call timeout at org .apache .rocketmq .client .impl .producer .DefaultMQProducerImpl .sendDefaultImpl( DefaultMQProducerImpl .java :588) at org .apache .rocketmq .client .impl .producer .DefaultMQProducerImpl .send( DefaultMQProducerImpl .java :1223) at org .apache .rocketmq .client .impl .producer .DefaultMQProducerImpl .send( DefaultMQProducerImpl .java :1173) at org .apache .rocketmq .client .producer .DefaultMQProducer .send( DefaultMQProducer .java :214) at com .lct .test .quickStart .Producer .main( Producer .java :28) at sun .reflect .NativeMethodAccessorImpl .invoke0( Native Method) at sun .reflect .NativeMethodAccessorImpl .invoke( NativeMethodAccessorImpl .java :62) at sun .reflect .DelegatingMethodAccessorImpl .invoke( DelegatingMethodAccessorImpl .java :43) at java .lang .reflect .Method .invoke( Method .java :498) at com .intellij .rt .execution .application .AppMain .main( AppMain .java :140) 16 :22 :41.772 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address [] result: true 16 :23 :11.770 [NettyClientSelector_1] INFO RocketmqRemoting - closeChannel: close the connection to remote address [] result: true ## 解决办法 ## * 因为现在主要是熟练 RocketMQ 的 API,所以直接关闭了 Linux 的防火墙,实际中如果买的是如 阿里云的云主机,应该会好一些 [ root@localhost ~] # systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since 六 2018 -08 -11 23: 20: 53 CST; 56min ago Main PID: 877 (firewalld) CGroup: /system.slice/firewalld.service └─ 877 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid 8月 11 23: 20: 50 localhost.localdomain systemd[ 1]: Starting firewalld - dynamic firewall..... 8月 11 23: 20: 53 localhost.localdomain systemd[ 1]: Started firewalld - dynamic firewall ...n. Hint: Some lines were ellipsized, use -l to show in full. [ root@localhost ~] # * 如上所示防火墙是开的,下面指令关闭防火墙 [ root@localhost ~] # systemctl stop firewalld [ root@localhost ~] # systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: inactive (dead) since 日 2018 -08 -12 00: 19: 39 CST; 2s ago Process: 877 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status= 0/SUCCESS) Main PID: 877 (code=exited, status= 0/SUCCESS) 8月 11 23: 20: 50 localhost.localdomain systemd[ 1]: Starting firewalld - dynamic firewall..... 8月 11 23: 20: 53 localhost.localdomain systemd[ 1]: Started firewalld - dynamic firewall ...n. 8月 12 00: 19: 38 localhost.localdomain systemd[ 1]: Stopping firewalld - dynamic firewall..... 8月 12 00: 19: 39 localhost.localdomain systemd[ 1]: Stopped firewalld - dynamic firewall ...n. Hint: Some lines were ellipsized, use -l to show in full. [ root@localhost ~] #
相关 异常处理疏忽:Java代码常见异常处理缺失场景 在编写Java程序时,我们可能会遇到各种异常。如果这些异常没有被适当地处理,就会导致程序的运行出现问题或者中断。 以下是一些常见的异常处理缺失场景: 1. 文件操作: 小灰灰/ 2024年09月12日 15:36/ 0 赞/ 17 阅读
相关 Java异常处理机制和常见异常示例 Java的异常处理机制主要通过try-catch-finally结构来实现。 1. try块:包含可能抛出异常的代码。如果在try块中发生了未被捕获的异常,程序将停止执行,并 不念不忘少年蓝@/ 2024年09月12日 14:00/ 0 赞/ 22 阅读
相关 Java异常处理:捕获和处理常见异常示例 在Java编程中,异常处理是一种机制,用于在程序执行过程中遇到错误或异常情况时,能够优雅地捕获并处理这些异常。 以下是一些常见异常的捕获和处理示例: 1. **空指针异常* 以你之姓@/ 2024年09月10日 23:39/ 0 赞/ 29 阅读
相关 Java异常处理:常见异常、处理方式及误用 在Java编程中,异常处理是一种机制,用于捕获和处理程序运行时可能出现的错误情况。以下是一些常见的Java异常类型,以及它们的处理方式: 1. **IOException** 桃扇骨/ 2024年09月05日 23:06/ 0 赞/ 20 阅读
相关 异常常见类型处理分析 package cyb.lxf.staring.test; public class TestMyException \{ public static void mai 浅浅的花香味﹌/ 2022年08月06日 09:10/ 0 赞/ 197 阅读
相关 python——常见异常及异常处理 什么是异常? ------异常:不正常的情况 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程 ╰半夏微凉°/ 2022年05月31日 12:47/ 0 赞/ 323 阅读
相关 RocketMQ 常见异常处理 MQClientException: No route info of this topic, TopicTest1 异常说明 在客户端的 Producer 淡淡的烟草味﹌/ 2022年05月05日 14:28/ 0 赞/ 1579 阅读
相关 java 常见异常处理方式 1.tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError:) 雨点打透心脏的1/2处/ 2022年01月20日 20:35/ 0 赞/ 237 阅读
相关 Java_常见异常与处理 1、概述 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0 冷不防/ 2022年01月14日 09:59/ 0 赞/ 265 阅读
还没有评论,来说两句吧...