本版本为非向下兼容
- 从1.4.0开始往中央仓库发布。
- 历史版本,只在内部维护,中央仓库不再发布
v1.4.0的pom依赖
<!-- 日志门面使用slf4j,日志实现可以选择log4j、log4j2、logback,可参考:https://github.com/alipay/sofa-bolt/wiki/log_implementation_jar -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.13.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa.common</groupId>
<artifactId>sofa-common-tools</artifactId>
<version>1.0.12</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>hessian</artifactId>
<version>3.3.0</version>
</dependency>
变更内容
1. pom坐标
由
// 内部1.0.0~1.3.1版本使用,release note到内部gitlab查看
<dependency>
<groupId>com.alipay.remoting</groupId>
<artifactId>bolt</artifactId>
<version>${version}</version>
</dependency>
改为
//外部1.4.0开始使用,release note 在github查看
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>${version}</version>
</dependency>
2. 内部改动
- 【优化】把心跳Processor的逻辑,单独抽了一个RpcHeartBeatProcessor,同时处理器的注册逻辑,明确注册this.processorManager.registerProcessor(CommonCommandCode.HEARTBEAT,new RpcHeartBeatProcessor());
3. 自定义协议使用方需要关注
3.1 bolt 通用core层(bolt-msg,bolt-tr-adapter这样的自定义协议使用者需要关注)
- 【重构】新增ProtocolCode类,包装一个byte[]数组,来标识协议号。协议号我们建议用单个byte,但如果有业务想用多byte也是可以的。同时新增ProtocolManager,以及RpcProtocolManager。ProtocolManager的初始化放在RpcRemoting里的静态区域。
- 注意,如果期望使用bolt来自定义协议,同时协议的magic code为多字节的场景,可以复用我们的ProtocolCodeBasedDecoder,以及ProtocolCodeBasedEecoder
- 【缺陷】解决ConnectionManager#remove方法,没有判断该Connection是否有在其他Group存在,而直接close掉的bug。bolt-msg注意这个点。
- 【优化】将SwitchStatus重命名为GlobalStatus,其他不变。注意此改动会引起使用了该类的业务编译失败,修改命名即可。开关状态与心跳开关、crc开关等逻辑相关,必须修改。
- 【优化】BaseRemoting增加一个CommandFactory实例对象,其中CommandFactory为新增类,统一收口command的创建,包括请求与响应。
- 【重构】抽象AbstractBatchDecoder,修改licence头为netty自己的,同时注释里注明了改动点和用法。同时提供了ProtocolCodeBasedDecoder.java与ProtocolCodeBasedEncoder.java,方便开发协议的使用者复用。比如bolt-msg可以复用。
- 【重构】RemotingCommand新增加几个接口定义,注意继承了RemotingCommand的业务需要关注。
3.2 bolt rpc协议层(rpc使用者需要关注)
- 【优化】之前UserProcessor控制超时failfast的开关handleTimeoutInIOThread的叫法有问题,其实不是在io线程处理的,因此重命名为timeoutDiscard。此改动会引起编译失败,必须修改。
- 【重构】统一codec与serializer的叫法。之前代码里不管是api还是注册,二者有混用的情况。现在明确概念:codec用于协议编解码,serializer用于序列化与反序列化
4. 复用rpc协议使用方需要关注
- 【pom】删除了fastjson的依赖,如果依赖fastjson,需要自定义同时引入依赖。
5. 其他
- 【优化】修改和完善注释,将中文改为英文。