producer.send方法,sendKernelImpl中,有MessageClientIDSetter.setUniqID(msg),是在message的properties属性(一个map)中,放入key为UNIQ_KEY的一个unique id(只有当UNIQ_KEY不存在,或者对应的值为空)。
而当consumer收到message之前,要由MessageDecoder解码,解码的时候,会用这两行代码
String msgId = createMessageId(byteBufferMsgId, msgExt.getStoreHostBytes(), msgExt.getCommitLogOffset());
msgExt.setMsgId(msgId);
给msg的msgId属性赋值,新生成一个unique id。
然而在编码的时候,我们调用MessageExt的子类MessageClientExt的getMsgId方法时,发现优先去取的是之前UNIQ_KEY的值,其次才是MessageDecoder解码的时候赋的、msgId属性对应的值。
所以如果我们想自己使用uuid给message赋值的时候,可以提前在message的properties属性中设置这个uuid。