SpringBoot集成RocketMQ及报错处理
项目场景:
- 【说明】:springBoot集成RocketMQ开发
- 【环境】:阿里云+Centos8+RocketMQ+SpringBoot+Docker
- 【启动】:docker start rmqserver rmqbroker[因为RocketMQ安装在Docket容器中,所以这样启动]
服务器broker.conf配置信息:
brokerIP1=外网ip
namesrvAddr=外网ip:9876
brokerName=broker_tanhua
autoCreateTopicEnable=true
- 【说明】:1.brokerIP1 当前broker监听的IP
2.Broker是RocketMq的核心,负责消息的传递(提供者=》消费者)以及消息的持久化存储,消息的HA机制以及服务器过滤功能。
3.autoCreateTopicEnable:自动创建Topic路由
问题一描述:
- 【说明】:我第一次配置时,broker.conf配置文件中没有配置autoCreateTopicEnable,因此在程序运行时会提示没有路由信息:No route info of this topic: tanhua-sso-login
- 【说明】我发送消息路由名字是tanhua-sso-login
错误信息:
No route info of this topic: tanhua-sso-login
- 【错误信息截图】:我没有截图网上找了一个,差不多
解决方式:
- 【说明】:我当时也在网上找了很多,有在启动时添加自动创建的也有说防火墙开启的原因,但是我感觉会这个的话应该都知道关防火墙。在启动时添加自动创建可能也好使,但是我没试过,因为我在搜索时发现问题统一指向说没有自动创建,因此我想的是直接在配置文件中进行修改,然后重启
- 【解决方式】:在broker.conf配置文件中添加如下配置:
autoCreateTopicEnable=true
SpringBoot集成信息:
- 【application.properties】:
# RocketMQ相关配置
rocketmq.nameServer=外网IP:9876
rocketmq.producer.group=tanhua
rocketmq.producer.send-message-timeout= 6000
- 【注】:这里配置的开通没有spring,我之前加spring怎么也连接不上
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-common</artifactId>
<version>4.5.1</version>
</dependency>
问题二描述:
- 【说明】:我在修改上面的错误后,紧接着又报
- 【错误信息】:
RemotingTooMuchRequestException: sendDefaultImpl call timeout
- 【错误信息截图】:也是没有截图网上找了一个,差不多
*【思路】:错误信息中提示call timeout,timeout一般想到到时连接或响应超时,因此在网上找到的是在发送MQ时出错,网上解决方案是:修改Mq配置文件中的sendMsgTimeout,因此想到修改可以修改SpringBoot连接MQ时的配置设置 - 【解决方案】:添加rocketmq.producer.send-message-timeout= 6000
- 【说明】:给大一点发送信息超时时间。
*【说明】:同时在SpringBoot集成RoctetMQ配置中没有sendMsgTimeout因此用rocketmq=>输入’.’=>输入sendtimeout=>查看有哪些关于这个的配置。
*【完整配置】:
# RocketMQ相关配置
rocketmq.nameServer=外网IP:9876
rocketmq.producer.group=tanhua
rocketmq.producer.send-message-timeout= 6000