您现在的位置是:首页 > 文章详情

RocketMQ问题排查思路

日期:2019-07-08点击:944

1、使用HTTP协议报错500。排查思路:
1). 是不是有tcp的producer在发送。
2). 是不是有大量的非法字符。建议单独建一个topic给http,然后再进行测试。

2、报没有权限:
1). 如果是主账号:确保GID和topic都是主账号创建;
2). 如果是子账号:确保GID是子账号创建,并且topic授权这个ak使用。

3.学会查看日志:
ons.log日志保存路径:/{user.home}/logs/ons.log,其中{user.home}是指启动当前 Java 进程的用户的根目录

4.消息订阅类问题分析思路
1). 先看下程序是否正常运行,如有异常排查日志。如正常运行,检查消费端的消息堆积和订阅关系。如订阅关系不一致,纠正。如有堆积,看具体哪个消费端堆积,可以看堆栈及打jstack来分析。https://help.aliyun.com/knowledge_detail/54347.html
2). 消息接收不到,查看消息ID,通过消息查询去判断消息是否接收,如果显示”至少订阅一次“说明消息肯定被订阅到了,如果消息轨迹看不到,应该是消息轨迹公测存在一定的缺陷,以消息查询结果为准。

5.不保证消息一定不重复,但是保证消息一定不丢失。

6.事务消息会回查频率5秒一次

7..net仅支持Windows系统

8.消息验证中Tag是不生效的。

9.删除监控警报需要在所有账号下进行查看。

10.产品不建议再做二次封装,本身.net SDK的兼容性就不是太好。如果是一定要封装,请先使用SDK测试调通了再进行封装。务必使用64位的方式封装。

  1. .net TCP协议开发,程序必须编译为64位,才能够调用,32位不支持

12.一个CID在消费的时候不管多少个进程、线程、机器,只能用一个tag,否则就会导致消息被不可预期的过滤掉。

13.客户端堆积的是指一次都未消费的堆积消息量,不包含重试的消息。另外报警必须保证消费端在线。

  1. topic的消息类型为顺序消息,则不支持定时/延时消息和事务消息。

15.主账号授权给主账号只能通过STS

16.使用老版本的默认实例会导致发送错误,需要修改NAMESER_ADDR。

17..net中文乱码问题:

添加编码解码类:

/// 编码解码测试类 /// </summary> public class base6tstring { public static string ToBase64String(string value) { if (value == null || value == "") { return ""; } byte[] bytes = Encoding.UTF8.GetBytes(value); return Convert.ToBase64String(bytes); } public static string UnBase64String(string value) { if (value == null || value == "") { return ""; } byte[] bytes = Convert.FromBase64String(value); return Encoding.UTF8.GetString(bytes); } 
} 

发送:

 string myString = "Example message body测试"; myString = base6tstring.ToBase64String(myString); Message msg = new Message(factoryInfo.getPublishTopics(), "tagA", myString);

接收:

 Byte[] text = Encoding.Default.GetBytes(value.getBody()); string s = System.Text.Encoding.UTF8.GetString(text, 0, text.Length); Console.WriteLine(base6tstring.UnBase64String(s)); return ons.Action.CommitMessage;

18.当一条消息已被成功发送到服务端并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。 如果此时生产者意识到消息发送失败并尝试再次发送消息,消费者后续会收到两条内容相同并且 Message ID 也相同的消息。
https://help.aliyun.com/document_detail/44397.html
消息重复消费的问题,在互联网场景下,无法规避,用户需要自行做幂等处理。

19.报错(The receipt handle you provided has expired.)消息被客户端获取到后,拿到的句柄没有在message.NextConsumeTime前删除,会报这个错误,一般来说是因为消费消息过慢导致的
20.net sdk也有消费端的ons.log日志,如果遇到错误需要提工单,这个也可以打包提供下。
// 设置日志路径
factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");
21.接入点是有自动路由机制:
1). 默认的实例是全局唯一的,这样系统根据默认实例的topic能自动路由到正确的接入地址
2). 默认的实例的topic即便接入点配置的不对,也可以找到正确的接入地址的
3). 新建的实例不行,新建实例是咱们改版后的部署模型,支持不同实例之间可以有同名的topic,这个时候必须指定对接入点地址
22.至于osPageCacheBusyTimeOutMills,目前只有铂金版的才支持调整的。标准版本建议catch重试发送。
23.使用管控API查询消息或者死信消息是被BASE64加密的,代码获取需要解密。
final BASE64Decoder decoder = new BASE64Decoder();
System.out.println(new String(decoder.decodeBuffer(response.getData().getBody()), "UTF-8"));

原文链接:https://yq.aliyun.com/articles/708176
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章