大佬们请教一下,Apache RocketMQ中这块有必要用在finally里release不行么?

大佬们请教一下,Apache RocketMQ中这块有必要用SemaphoreReleaseOnlyOnce嘛,直接try-catch-finally,在finally里release不行么?image.png

展开
收起
真的很搞笑 2023-06-06 13:54:36 138 分享 版权
3 条回答
写回答
取消 提交回答
  • SemaphoreReleaseOnlyOnce是RocketMQ中一种特殊的Semaphore实现,它只能被释放一次。在RocketMQ中,它主要用于限制消息发送者的发送速率,以保证消息队列的稳定性。

    如果你只是普通的使用Semaphore,直接使用try-catch-finally,在finally里release是可以的。但是如果你使用SemaphoreReleaseOnlyOnce,你需要保证只释放一次,否则可能会影响消息队列的性能和稳定性。

    因此,如果你需要限制消息发送者的发送速率,建议使用SemaphoreReleaseOnlyOnce。如果你只是普通的使用Semaphore,直接使用try-catch-finally,在finally里release即可。

    2023-06-11 15:46:27
    赞同 展开评论
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在Apache RocketMQ中,确保消息生产者或消费者的连接正确释放是非常重要的。通常情况下,建议将连接的释放操作放置在finally语句块中。

    使用finally语句块可以确保在任何情况下都会执行连接的释放操作,无论程序正常执行还是异常退出。这样可以避免连接泄漏或者资源浪费等问题,同时也可以提高应用的健壮性和稳定性。

    如果您在使用RocketMQ时需要创建生产者或消费者连接,请确保在finally语句块中释放连接,这样可以更好地保障RocketMQ的性能和稳定性。

    2023-06-06 16:33:31
    赞同 展开评论
  • 这个是为了防止开发的时候,多次 release 导致信号量不是 1:1的申请和释放,代码书写层面的“约束”,此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”

    2023-06-06 14:01:48
    赞同 展开评论

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系列产品 Serverless 化。RocketMQ 中文社区:https://rocketmq-learning.com/

收录在圈子:
+ 订阅
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
还有其他疑问?
咨询AI助理