RocketMQ实战异常汇总

本文总结了RocketMQ实战中遇到的各种异常,包括无主题路由信息、不支持SQL92过滤、MQ控制台查询死信队列异常、ACL权限认证问题、查询消息无结果、签名失败、broker忙碌等问题,分析了原因并提供了详细的解决方法。
摘要由CSDN通过智能技术生成

今天的博客主题

      MQ消息中间件 --》RocketMQ --》RocketMQ实战异常汇总


目录

No route info of this topic, xxxTopic

CODE: 1 DESC: The broker does not support consumer to filter message by SQL92

MQ控制台查询%DLQ%Topic消息异常

broker配置文件增加aclEnable=true配置开启acl权限认证,MQ控制台Cluster模块异常

CODE: 208 DESC: query message by key finished, but no message.

[10015:signature-failed] unable to calculate a request signature. Algorithm HmacSHA1 not available

CODE: 2 DESC: [TIMEOUT_CLEAN_QUEUE] broker busy, start flow control for a while, period in queue: 203ms, size of queue: 2


No route info of this topic, xxxTopic

按照gitHub上rocketMQ提供的Demo进行生产者发送消息到MQ,出现下面错误

错误原因:没有创建主题,主题不存在,导致MQ路由不到此主题。

解决方案:通过控制台,来创建主题。

还有就是可以在启动broker的时候设定 自动创建Topic nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &

不建议在生产环境这样配置,(弊端待补充)。

 

CODE: 1 DESC: The broker does not support consumer to filter message by SQL92

错误原因:目前代理不支持消费者通过SQL92过滤消息

解决方案:在broker的配置文件添加 enablePropertyFilter = true 来支持SQL92方式过滤消息

 

MQ控制台查询%DLQ%Topic消息异常

模拟消息重试,16次之后消息不在消费,消息已经进入死信队列,但想通过控制台查询死信队列里有没有该消息,输入条件之后 SEARCH 出现异常:

{
  "status": -1,
  "data": null,
  "errMsg": "org.apache.rocketmq.client.exception.MQClientException: 
  Can not find Message Queue for this topic, %DLQ%CG_RDATA_CLINICAL_NCT\nSee     
  http://rocketmq.apache.org/docs/faq/ for further details."
}

根据异常信息发现是“未找到此主题的消息队列”

在服务端执行命令:sh mqadmin topicList -n localhost:9876,看该topic是否存在,不存在的话那就是服务端没有自动创建死信队列的topic

如果存在,查看该topic的路由信息,执行命令:sh mqadmin topicRoute -n localhost:9876 -t %DLQ%你的死信队列TOPIC

如果看到"perm":2,那就有问题。【至于这个"perm":2 和 "perm":6  是一个权限的问题。】

如果是"perm":2那就改一下执行命令:sh mqadmin updateTopic -b localhost:10911 -n localhost:9876 -t %DLQ%你的死信队列TOPIC -p 6

如果以上情况都不是,那就在搜索引擎下吧。

 

broker配置文件增加aclEnable=true配置开启acl权限认证,MQ控制台Cluster模块异常

ACL (Access Control List 访问控制列表)

Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 1 DESC: org.apache.rocketmq.acl.common.AclException: request's extFields value is null,org.apache.rocketmq.acl.plain.PlainAccessValidator.parse(PlainAccessValidator.java:57)

具体抛出异常位置的地方

通过下面几行代码就知道了这个ExtFields里面装载是ACCESS_KEY和签名什么的。

在Broker项目下的BrokerController这个类里的initialAcl就是来初始化验证的位置。

MQ控制台是两年前的一个项目,而acl认证是MQ最近4.4.0版本出来的,不排除控制台这边没有进行对其支持。

具体分析:

MQ-console开发人员对MQAdmin做了一个切面,控制台上有些模块操作需要读到broker。

通过这个切面发现不单单是cluster这一块,读topic列表时,也到了这个切面。

看下这个切面里的具体做法,黄色线标识区域就是初始化MQAdmin实例的。

就延伸到这个方法里了,来实例化DefaultMQAdminExt,去操作服务端.

DefaultMQAdminExt具体的构造函数,提供了权限访问的构造方法。可以发现,在控制台这边没有用带RPCHOOK的构造函数。

哪只要把实例化DefaultMQAdminExt的代码修改一下就好了。

Before change:

DefaultMQAdminExt defaultMQAdminExt;
if (timeoutMillis > 0) {
    defaultMQAdminExt = new DefaultMQAdminExt(timeoutMillis);
}else {
    defaultMQAdminExt = new DefaultMQAdminExt();
}

After change:

DefaultMQAdminExt defaultMQAdminExt;
if (timeoutMillis > 0) {
    defaultMQAdminExt = new DefaultMQAdminExt(getAclRPCHook(),timeoutMillis);
}else {
    defaultMQAdminExt = new DefaultMQAdminExt(getAclRPCHook());
}

static RPCHook getAclRPCHook() {
    return new AclClientRPCHook(new SessionCredentials(ACL_ACCESS_KEY,ACL_SECRET_KEY));
}

ACL_ACCESS_KEY,ACL_SECRET_KEY需要定义一下,写到配置文件,然后从配置文件读取。

最好是把控制台上的所有功能点,都点一遍 看有什么异常,差不多服务端开了acl之后 控制台上有部分功能会异常。

 

CODE: 208 DESC: query message by key finished, but no message.

在做demo时,服务端都是默认配置,没有aclEnable=true这一项ÿ

RocketMQ是一个开源的分布式消息中间件,具有高吞吐量、高可用性和可伸缩性的特点。它是由阿里巴巴集团开发和维护的,被广泛应用于大规模分布式系统中。 在实战中,使用RocketMQ可以实现消息的可靠传输和异步通信,适用于各种场景,如订单处理、日志收集、实时数据同步等。以下是一些RocketMQ实战应用场景和操作步骤: 1. 安装和配置RocketMQ:首先需要下载和安装RocketMQ,然后进行相关的配置,包括名称服务器(NameServer)和消息代理(Broker)的配置。 2. 创建Topic和Producer:在RocketMQ中,消息通过Topic进行分类,Producer负责发送消息到指定的Topic。可以使用命令行工具或者编程方式创建Topic和Producer。 3. 创建Consumer和订阅Topic:Consumer负责订阅指定的Topic,并处理接收到的消息。可以使用命令行工具或者编程方式创建Consumer,并订阅感兴趣的Topic。 4. 发送和接收消息:通过Producer发送消息到指定的Topic,Consumer订阅该Topic并接收消息进行处理。可以使用RocketMQ提供的API进行消息的发送和接收操作。 5. 实现消息的可靠性传输:RocketMQ可以保证消息的可靠性传输,即使在发送或接收过程中出现异常,也能够保证消息不丢失。可以通过配置参数和使用事务消息等方式来实现可靠性传输。 6. 监控和管理RocketMQRocketMQ提供了一系列的监控和管理工具,可以对消息的发送和接收进行监控,以及管理Topic和Consumer等。 以上是RocketMQ的简单实战应用场景和操作步骤,希望对你有所帮助。详细的使用方法和更多高级功能可以参考RocketMQ的官方文档和示例代码。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值