最近在看RecketMQ源码,这里记录一下rocketMQ压缩方案
如下:
在调sendKernelImpl的时候调用了如下
源码如下:
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(src.length);
java.util.zip.Deflater defeater = new java.util.zip.Deflater(level);
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream, defeater);
try {
deflaterOutputStream.write(src);
deflaterOutputStream.finish();
deflaterOutputStream.close();
result = byteArrayOutputStream.toByteArray();
} catch (IOException e) {
defeater.end();
throw e;
} finally {
try {
byteArrayOutputStream.close();
} catch (IOException ignored) {
}
defeater.end();
}
return result;
消息发送的时候会进行一个消息压缩,采用的是 Deflater的压缩算法。
除了这些,源码有很多值得记录和学习的地方例如openmessage消息规范,netty用于系统网络层交互例如(namesrv 和 producer等之间的交互,服务端是怎么根据topicName选举一个queue使用的),此文作为记录篇的第一篇,后续会逐渐输出。