状态不一致___异常类别_产品使用问题_消息队列 MQ-阿里云
1. 消息不合法
可能产生的原因
一般是消息属性、消息内容不合法,不合法的情况有:
- 消息为空
- 消息内容为空
- 消息内容长度为0
- 消息内容超过限定长度
建议解决方案
请确保消息没有以上的不合法情况,并根据异常提示进行解决。
2. 参数不合法
可能产生的原因
参数不合法的情况有以下几种:
嵌套的异常说明 | 异常描述 |
---|---|
consumeThreadMin Out of range [1, 1000] | 消费端线程数设置不合理 |
consumeThreadMax Out of range [1, 1000] | 消费端线程数设置不合理 |
messageListener is null | 未设置messageListener |
consumerGroup is null | 未设置Consumer ID |
msg delay time more than 40 day | 定时消息延时不能超过40天 |
建议解决方案
按照如下步骤操作:
- 按照异常提示修改客户端对应参数的配置,确保其在合理范围内;
- 重启应用。
3. 客户端状态异常
可能产生的原因
- 创建 Consumer、Producer 之后未显示调用 start() 方法来启动客户端;
- 创建 Consumer、Producer 之后 start() 过程有异常导致客户端启动失败;
- 创建 Consumer、Producer 并成功调用 start() 方法后,显示调用了 shutdown() 方法关闭了客户端;
建议解决方案
按如下步骤操作:
- 确保创建 Consumer、Producer 之后调用 start() 保证客户端处于启动状态;
- 查看 ons.log 判断在客户端在启动过程中是否有异常。
4. 订阅关系不一致
问题描述
在不同的 JVM 中启动了多个 Consumer,并且给相同的 Consumer ID 配置了不同的 Topic,或者是相同的 Topic 但 Tag 不同,最终导致订阅关系不一致,消息不符合预期。
错误代码示例
错误示例一:同一个订阅组(CID-MQ-FAQ)订阅的 Topic 不同(分别是 MQ-FAQ-TOPIC-1、MQ-FAQ-TOPIC-2)。
JVM-1上的代码:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
JVM-2上的代码
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-2", "NM-MQ-FAQ", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
错误示例二:同一订阅组(CID-MQ-FAQ)订阅的 Topic 相同,但 Tag 不同(分别NM-MQ-FAQ-1、NM-MQ-FAQ-2)。
JVM-1上的代码:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ-1", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
JVM-2上的代码:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID-MQ-FAQ");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("MQ-FAQ-TOPIC-1", "NM-MQ-FAQ-2", new MessageListener() {
public Action consume(Message message, ConsumeContext context) {
System.out.println("Receive: " + message);
return Action.CommitMessage;
}
});
consumer.start();
建议解决方案
请确保在不同 JVM 中使用相同的 Consumer ID 启动多个 Consumer 时,配置的 Topic 和 Tag 是一致的。
最后更新:2016-08-05 10:41:28
上一篇:
资源不存在___异常类别_产品使用问题_消息队列 MQ-阿里云
下一篇:
TXC for MQ 快速入门__TXC for MQ_消息队列 MQ-阿里云
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云