Rocket MQ报错No route info of this topic的问题探究

简介: Rocket MQ报错No route info of this topic的问题探究

背景

系统订单创建成功之后需要发送订单创建成功的消息,但是今天突然遇到了如下的报错

org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest
See http://rocketmq.apache.org/docs/faq/ for further details.
    at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:610)
    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)

探究

出现上面的错误,主要有三种情况

一:Topic不存在,即没有创建出来次Topic(我们项目均为手动创建),或者Broker模块不支持自动创建topic。

二:Broker模块没有正确连接到Name Server

三:Producer没有正确连接到Name Server

办法

排查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

如果按前两步检查没有问题,但启动还是报错,那就只剩下第三种情况了,最大可能是发送者和mq服务器之间的网络或端口不通,可以使用ping或者telnet确定问题。如果ping或者telnet连接不通,则说明producer无法连接到nameserver,很可能是防火墙的原因 ,需要联系运维工程师开通网络或端口权限。

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
5月前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
1月前
|
消息中间件 数据库
RabbitMQ启动报错:Error during startup: {error, {schema_integrity_check_failed,
通过上述步骤,可以逐步排查和解决RabbitMQ启动时出现的 `Error during startup: {error, {schema_integrity_check_failed, ...}}`错误。这些步骤包括检查磁盘空间、修复文件权限、清理Mnesia数据库、检查日志文件以及升级或重装RabbitMQ。希望这些方法能帮助您解决问题,使RabbitMQ顺利启动并正常运行。
141 1
|
3月前
|
消息中间件 存储 缓存
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
283 7
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
|
2月前
|
消息中间件 负载均衡 算法
聊聊 RocketMQ中 Topic,Queue,Consumer,Consumer Group的关系
本文详细解析了RocketMQ中Topic、Queue、Consumer及Consumer Group之间的关系。文中通过图表展示了Topic可包含多个Queue,Queue分布在不同Broker上;Consumer组内多个消费者共享消息;并深入探讨了集群消费与广播消费模式下Queue与Consumer的关系,以及Rebalancing机制在实例增减时如何确保负载均衡。理解这些关系有助于更好地掌握RocketMQ的工作原理,提升系统运维效率。
270 2
|
4月前
|
消息中间件 开发者
【RabbitMQ深度解析】Topic交换器与模式匹配:掌握消息路由的艺术!
【8月更文挑战第24天】在消息队列(MQ)体系中,交换器作为核心组件之一负责消息路由。特别是`topic`类型的交换器,它通过模式匹配实现消息的精准分发,适用于发布-订阅模式。不同于直接交换器和扇形交换器,`topic`交换器支持更复杂的路由策略,通过带有通配符(如 * 和 #)的模式字符串来定义队列与交换器间的绑定关系。
80 2
|
5月前
|
消息中间件 Java 物联网
消息队列 MQ操作报错合集之建立连接时发生了超时错误,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ操作报错合集之建立连接时发生了超时错误,该如何解决
|
5月前
|
消息中间件 JavaScript Linux
消息队列 MQ操作报错合集之客户端在启动时遇到了连接错误,是什么原因
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 存储 Java
消息队列 MQ使用问题之如何将RocketMQ中某个集群的topic迁移到另一个集群
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
89 9
|
2月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
85 7