为啥要取两者之间的较小值?[阿里云消息队列MQ]

我看代码的时候发现有这么一个提交 说是当客户端指定分区大于服务端topic时取较小的那个,我不是很清楚为什么要这么做,我感觉取服务端的topic大小不才是最准确的吗。所以想看下#212那个issue到底发现了什么问题 才要这么做 为啥要取两者之间的较小值?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
2 条回复 A 作者 M 管理员
  1. 这个case不好追溯了。不过自动创建Topic 这个链路是非常明确的,不适合生产环境。生产环境,资源的CRUD管理还是要严格遵守。否则就会产生这种细节上的纠结。内部的约定很难被业务方理解的。此答案整理自钉群“群1-Apache RocketMQ 中国开发 者钉钉群”

  2. 取最小值本质上是为了容错准备的,每次能够保证消息一定是通过最小的分区路由过去的。

  3. 这种情况是为了防止客户端在指定分区时输入错误的分区号。如果服务端的topic只有3个分区,而客户端却指定了4个分区,这将导致客户端的消息无法正确发送到服务端。所以服务端为了避免这种情况,会自动取客户端指定的分区号与服务端topic中分区号的较小值作为实际的分区号来发送消息。这样可以保证消息被正确地路由到正确的分区。