rocketmq 消息id生成规则

public staticString createMessageId(finalByteBuffer input,final ByteBuffer addr,final long offset) {

               input.flip();

               input.limit(MessageDecoder.MSG_ID_LENGTH);

               input.put(addr);

               input.putLong(offset);

               return UtilAll.bytes2string(input.array());

}

如上代码,我们可以看到  messageId 分为两部分 :

ip地址 8 个字节 

offset  8个字节

那么ip地址 如何转成 8个字节呢? 请看如下代码:

private staticByteBuffer socketAddress2ByteBuffer(final SocketAddress socketAddress, final  ByteBuffer byteBuffer) {

          InetSocketAddress inetSocketAddress = (InetSocketAddress) socketAddress;

          byteBuffer.put(inetSocketAddress.getAddress().getAddress(),0,4);           

         byteBuffer.putInt(inetSocketAddress.getPort());

          byteBuffer.flip();

          return byteBuffer;

}

public staticByteBuffer  socketAddress2ByteBuffer(SocketAddress socketAddress) {

            ByteBuffer byteBuffer = ByteBuffer.allocate(8);

            return socketAddress2ByteBuffer(socketAddress, byteBuffer);

}


执行方法后 Id 类似:AC110E7339B058644D464149A11D0004

你可能感兴趣的:(rocketmq 消息id生成规则)