我看代码的时候发现有这么一个提交 说是当客户端指定分区大于服务端topic时取较小的那个,我不是很清楚为什么要这么做,我感觉取服务端的topic大小不才是最准确的吗。所以想看下#212那个issue到底发现了什么问题 才要这么做 为啥要取两者之间的较小值?
为啥要取两者之间的较小值?[阿里云消息队列MQ]
「点点赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
我看代码的时候发现有这么一个提交 说是当客户端指定分区大于服务端topic时取较小的那个,我不是很清楚为什么要这么做,我感觉取服务端的topic大小不才是最准确的吗。所以想看下#212那个issue到底发现了什么问题 才要这么做 为啥要取两者之间的较小值?
这个case不好追溯了。不过自动创建Topic 这个链路是非常明确的,不适合生产环境。生产环境,资源的CRUD管理还是要严格遵守。否则就会产生这种细节上的纠结。内部的约定很难被业务方理解的。此答案整理自钉群“群1-Apache RocketMQ 中国开发 者钉钉群”
取最小值本质上是为了容错准备的,每次能够保证消息一定是通过最小的分区路由过去的。
这种情况是为了防止客户端在指定分区时输入错误的分区号。如果服务端的topic只有3个分区,而客户端却指定了4个分区,这将导致客户端的消息无法正确发送到服务端。所以服务端为了避免这种情况,会自动取客户端指定的分区号与服务端topic中分区号的较小值作为实际的分区号来发送消息。这样可以保证消息被正确地路由到正确的分区。