Apache RocketMQ 的官网有如下介绍, 但是在proxy请求的情况下 发现两者性能差别并不大 FlushDiskType SYNC_FLUSH(同步刷新)相比于ASYNC_FLUSH(异步处理)会损失很多性能,但是也更可靠,所以需要根据实际的业务场景做好权衡。这个是针对中间件自身的性能而言,在proxy代理请求的时候实际根据proxy的性能来确定,org.apache.rocketmq.client.java.exception.badrequestexception: [request-id=fedcc908-76bd-44b9-a7df-84822362db85, response-code=40013] INVALID_RECEIPT_HANDLEat org.apache.rocketmq.client.java.exception.StatusChecker.check(StatusChecker.java:63) ~[rocketmq-client-java-5.0.4.jar:?]at%20org.apache.rocketmq.client.java.impl.consumer.SimpleConsumerImpl.lambda$ack0$2(SimpleConsumerImpl.java:247)%20~[rocketmq-client-java-5.0.4.jar:?]at%20org.apache.rocketmq.shaded.com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:221)%20~[rocketmq-client-java-5.0.4.jar:?]at%20org.apache.rocketmq.shaded.com.google.common.util.concurrent.AbstractTransformFuture$AsyncTransformFuture.doTransform(AbstractTransformFuture.java:208)%20~[rocketmq-client-java-5.0.4.jar:?]at%20org.apache.rocketmq.shaded.com.google.common.util.concurrent.AbstractTransformFuture.run(AbstractTransformFuture.java:122)%20~[rocketmq-client-java-5.0.4.jar:?]at%20java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)%20~[?:1.8.0_362]at%20java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)%20~[?:1.8.0_362]at%20java.lang.Thread.run(Thread.java:750)%20~[?:1.8.0_362]有人消费消息的时候遇到过这个问题吧
这个异常是RocketMQ的客户端Java API抛出的,通常是消费者在调用ack方法时出现了错误,比如传递了一个无效的消息句柄(Receipt Handle)。根据异常信息可以看出,出现了INVALID_RECEIPT_HANDLE异常,说明传递的消息句柄无效,这个问题可能与消费者的消费逻辑有关,建议检查消费者的代码逻辑,尤其是在处理消息时是否正确地将消息句柄传递给了ack方法。
另外,在RocketMQ中,消费者消费消息的过程中,需要定期确认消息状态,否则消息将一直处于未确认状态,这会导致消费者无法再次消费该消息,也会占用服务器的资源。因此,建议做好消息状态的处理,保证及时确认消息状态并清理不必要的未确认消息。
至于性能方面的问题,如果proxy的性能较差,可能会导致性能瓶颈,建议使用高性能的proxy或者对proxy进行优化,以提高性能和稳定性。同时,也可以根据实际业务场景的需要选择合适的FlushDiskType。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/