springmvc整合rocketMQ 解决问题:MQClientException: No route info of this topic, TopicTest 2021-12-13 00:15 862阅读 0赞 ## 整合步骤 ## 1. 下载rocketMq 启动(jdk1.8) 2. 创建生产者 3. 创建消费者 4. 测试 ## 1、下载rocketMQ 与启动 ## 去Apache官网下载,解压后路径。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70] cd到bin目录,先启动NAMESERVER:start mqnamesrv.cmd 显示如下图则表示正常启动。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 1] 然后启动BORKER:start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true (备注:autoCreateTopicEnable=true 表示可以动态创建topic) 显示如下图表示启动正常。(备注:端口10911的是borker的默认端口地址,端口9876的是我们配置到NAMESERVER的地址,) ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 2] ## 创建生产者 ## pom.xml 依赖: <!-- rocketmq --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.0</version> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <!--<scope>test</scope>--> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.6.RELEASE</version> </dependency> rocket-producer.xml 配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <bean id="rocketmqProduct" class="org.apache.rocketmq.client.producer.DefaultMQProducer" init-method="start" destroy-method="shutdown"> <property name="producerGroup" value="producer1"/> <property name="namesrvAddr" value="192.168.100.223:9876"/> </bean> </beans> JUnitProducer.java 测试 生产消息类: import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.remoting.common.RemotingHelper; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:conf/rocket-producer.xml"}) public class JUnitProducer { @Autowired private DefaultMQProducer producer; @Test public void producerData() throws InterruptedException { for (int i = 0; i < 10; i++) { // 发10条消息 try { Message msg = new Message("TopicTest", // topic "TagA", // tag ("你好" + i).getBytes(RemotingHelper.DEFAULT_CHARSET)// body ); /*Message message = new Message(); message.setBody("test".getBytes());*/ // 调用producer的send()方法发送消息 // 这里调用的是同步的方式,所以会有返回结果 SendResult sendResult = producer.send(msg); // 打印返回结果,可以看到消息发送的状态以及一些相关信息 System.out.println(sendResult); } catch (Exception e) { e.printStackTrace(); Thread.sleep(1000); } } } } ## 创建消费者 ## pom.xml 与生产者一样 rocket-consumer.xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <bean id="consumerImplTest" class="com.api.mq.RocketMQListener" /> <bean id="rocketmqConsumer" class="org.apache.rocketmq.client.consumer.DefaultMQPushConsumer" init-method="start" destroy-method="shutdown"> <property name="consumerGroup" value="concurrent_consumer"/> <property name="namesrvAddr" value="192.168.100.223:9876"/> <property name="messageListener" ref="consumerImplTest"/> <property name="subscription"> <map> <entry key="TopicTest"> <value>*</value> </entry> </map> </property> </bean> </beans> 创建 rocket-consumer.xml 中的 RocketMQListener 监听类 import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.message.MessageExt; public class RocketMQListener implements MessageListenerConcurrently { private Log log = LogFactory.getLog(RocketMQListener.class); @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { try { for (MessageExt message : msgs) { String msgBody = new String(message.getBody()); log.info("msgId:" + message.getMsgId() + " msg:" + msgBody); } }catch (Throwable throwable){ throwable.printStackTrace(); log.error("MQ消费异常"); } //ConsumeConcurrentlyStatus.RECONSUME_LATER 消费失败,需要稍后重新消费 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } } 创建JUnitConsumer.java 测试消费 类 import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:conf/rocket-consumer.xml"}) public class JUnitConsumer { @Test public void runConsumer() { System.out.println("Consumer Started."); // 下面的代码把线程阻塞住,这样就可以先运行消费者再运行生产者.当然不要也可以,不要的话就得先运行生产者, //再运行消费者,生产者先把消息发送到MQ上,消费者启动后从MQ上拿消息 synchronized (JUnitConsumer.class) { while (true) { try { JUnitConsumer.class.wait(); } catch (Throwable e) { e.printStackTrace(); } } } } } ## 4、测试 ## 1. 先启动NAMESERVER,再启动BORKER 2. 右键启动消费者 JUnitConsumer.java 3. 右键启动生产者JUnitProducer.java 4. 结果图: 启动 消费者:![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 3] 启动生产者 发送msg: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 4] 消费者接受消息并消费: ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 5] ## 完成。 ## 总结: 可能遇到的问题:启动消费者报错 org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 6] 目前网上常见的解决方法: 1. broker没启动成功,启动命令有问题 linux: nohup sh mqbroker -n 192.168.180.133:9876 autoCreateTopicEnable=true windows : mqbroker.exe -n localhost:9876 autoCreateTopicEnable=true 2. broker没有自动创建topic 新版本中都是默认autoCreateTopicEnable=true 启动./mqbroker -n 127.0.0.1:9876 -p -p是查看配置信息 查看autoCreateTopicEnable的值是否为true 3. 不知道broker是否启动成功 查看broker.log,windows的默认在C:\\Users\\Admin\\logs\\rocketmqlogs linux的在~/logs/rocketmqlogs/ 看到register broker to name server localhost:9876 OK 说明已经成功注册到name server上了 4. fastjson, slf4j的jar包缺失 其实这个新版本应该没啥影响,不过以防万一的话还是都加上, 看上面我贴出来的pom.xml 5. 版本不对 (我用的是4.3.0) 6. 自动创建topic失败,改成手动创建topic。创建命令: D:\\Sofeware\\rocketmq-all-4.5.1-bin-release\\bin>mqadmin updateTopic -b 192.168.10 0.223:10911 -n 192.168.100.223:9876 -t TopicTest [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70]: /images/20211210/993ec71c208249c78971623b74281f54.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 1]: /images/20211210/c878f769660742b38addd8e934bf5263.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 2]: /images/20211210/03ce8cd2b0c94076b5986eb46d58747a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 3]: /images/20211210/54c784e30c454d748e34fe97c17dda28.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 4]: /images/20211210/a6580e67733e4b3aab669606acd5fe33.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 5]: /images/20211210/7942610fb6a24ac49b7fd210337c398a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZhbmdjaGFvMjAxMQ_size_16_color_FFFFFF_t_70 6]: /images/20211210/b88c81d6cd0044b48605e43353bd02bf.png 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 java-No route to host 解决办法 现No route to host 的时候,有如下几种可能: 1、对方的域名确实不通 2、本机自己开了防火墙 3、本机的etc/hosts 里面没有配置本机的机器名... 小灰灰/ 2020年11月01日 10:27/ 0 赞/ 858 阅读
相关 BUG-RocketMQ之sendDefaultImpl call timeout 和 No route info of this topic 运行环境 \[x\] MacOS Mojave10.14.3 \[x\] Java 1.8\_202 \[x\] RocketMQ 4.4.0 太过爱你忘了你带给我的痛/ 2021年09月09日 23:32/ 0 赞/ 109 阅读
相关 spring-boot-route(十五)整合RocketMQ RocketMQ简介 RocketMQ是阿里巴巴开源的消息中间件。目前已经贡献给Apache软件基金会,成为Apache的顶级项目。 rocketMQ基本概念 ! 悠悠/ 2021年09月18日 14:02/ 0 赞/ 113 阅读
相关 springmvc整合rocketMQ 解决问题:MQClientException: No route info of this topic, TopicTest 整合步骤 1. 下载rocketMq 启动(jdk1.8) 2. 创建生产者 3. 创建消费者 4. 测试 1、下载rocketMQ 与启动 去Apach 傷城~/ 2021年12月13日 00:15/ 0 赞/ 863 阅读
相关 RocketMQ手动创建Topic 创建Topic使用的命令 `mqadmin updateTopic`: .\mqadmin updateTopic Java HotSpot(TM) 64-B 港控/mmm°/ 2022年02月05日 16:51/ 0 赞/ 823 阅读
相关 vue之this.$route.query和this.$route.params的区别 1.this.$route.query的使用 A、传参数: this. r o u t e r . p u s h ( p a t h : ′ / m o n i t o ╰+攻爆jí腚メ/ 2022年02月20日 13:15/ 0 赞/ 176 阅读
相关 解决RocketMQ报No route info of this topic:异常 目前rocketmq 被使用的概率大大提升,相信很多朋友也都想着去试试,在测试的过程中根据官网给出的案例,应该有部分朋友遇到过这个异常: No route info of th 约定不等于承诺〃/ 2022年02月23日 20:54/ 0 赞/ 488 阅读
相关 rocketMq使用命令创建topic rocketMq添加主题命令 目录:rocketmq/bin sh mqadmin updateTopic -n 192.168.30.150:9876 -b 192. 水深无声/ 2022年04月23日 16:12/ 0 赞/ 1307 阅读
相关 MQClientException: No route info of this topic, *** MQClientException: No route info of this topic, TOPIC\_INVOICE\_SYNC\_DEV 这是因为accessKey 缺乏、安全感/ 2022年05月14日 11:58/ 0 赞/ 87 阅读
相关 亲测有用 已解决rocketmq使用错误:No route info for this topic 问题背景 最近博主在使用rocketmq在windows本地环境下去实现一个多人=聊天的功能 主要是使用了rocketmq的消息队列的功能 但是在启动本地德rocke 妖狐艹你老母/ 2022年11月20日 17:37/ 0 赞/ 91 阅读
还没有评论,来说两句吧...