MQBrokerException代码:2 DESC:[TIMEOUT_CLEAN_QUEUE]代理繁忙,启动流控制一段时间,队列中的周期:207ms,队列大小为0。
rocketmq 4.5.2,集群是syn双写、异步刷新磁盘。
G1 gc最大暂停时间非常低,小于20ms。
BrokerFastFailure.start方法每10毫秒启动一个线程来清理Expired Request。 线程作业之一是检查SendThreadPoolQueue,如果队列中有一条消息超过200毫秒(默认waitTimeMillsInSendQueue=200),则该消息将被删除。 在SendMessageProcessor的handleHA方法中,syncFlushTimeout为5000。 这是一个糟糕的默认参数。
默认参数为
syncFlushTimeout=5000 waitTimeMillsInSendQueue=5000 客户端jar移除 long costTime=beginTimestampPrev-beginTimestampFirst;if(timeout<costTime){callTimeout=true;break;} 这意味着param sendmessagetimeout意味着一个发送动作超时值为3000,
原提问者GitHub用户lwclover
建议增加sendMessageThreadPoolNums和waitTimeMillsInSendQueue的数量。此外,您可以测试4.7.1,它的性能提高了大约十倍。
原回答者GitHub用户duhenglucky
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。