Releases: sofastack/sofa-bolt
Releases · sofastack/sofa-bolt
v1.4.6 release note
修复1.4.x版本中在网络不稳定的情况下可能发生死锁的问题,详见issue:#96
兼容性
该版本向前兼容v1.4.x版本
v1.4.6的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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.6</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>
主要改动
bugfix
- [bugfix] 修复网络不稳定的情况下出现IO线程被阻塞的BUG
- [bugfix] 修复GitHub CI JDK1.6运行不过的问题
v1.4.5 release note(存在无法建连的BUG,不建议使用)
修复1.4.x版本中在网络不稳定的情况下可能发生死锁的问题,详见issue:#96
兼容性
该版本向前兼容v1.4.4
v1.4.5的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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.5</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>
主要改动
bugfix
- [bugfix] 修复网络不稳定的情况下出现IO线程被阻塞的BUG
v1.5.1 release note
所有MR以及issue见milestone1.5.1,修改内容包括:
兼容性
- 该版本对于使用Rpc协议的用户向前兼容
- 对自定义协议的用户,因为有一些代码重构,不向前兼容(兼容1.5.0版本)。
v1.5.1的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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.5.1</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>
主要改动
feature
- [feature] RPC 层支持从 IO 线程派发 mesage list
tuning
- [tuning] 优化了项目中一些代码风格的问题以及修复了一些警告代码
bugfix
- [bugfix] 修复了AbstractRemotingServer可以执行两次stop操作的BUG
- [bugfix] 将netty的workgroup线程组调整为static,保持和1.4.x版本一致
v1.4.4 release note
修复1.4.2版本中DefaultConnectionManager类日志打印错误的问题,详见issue: #52
兼容性
该版本向前兼容v1.4.2
v1.4.4的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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.4</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>
主要改动
- 修复DefaultConnectionManager日志打印的问题
v1.4.3 release note(Do not use this version below JDK1.8)
此版本采用了1.8的JDK编译,1.8版本以下的运行环境请不要使用此版本
修复1.4.2版本中DefaultConnectionManager类日志打印错误的问题,详见issue: #52
兼容性
该版本向前兼容v1.4.2
v1.4.3的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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.3</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>
主要改动
- 修复DefaultConnectionManager日志打印的问题
v1.5.0 release note
所有MR以及issue见milestone1.5.0,修改内容包括:
兼容性
- 该版本对于使用Rpc协议的用户向前兼容
- 对自定义协议的用户,因为有一些代码重构,不向前兼容。
v1.5.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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.2</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>
主要改动
feature
- [feature] 之前默认一直是UnpooledByteBufAllocator,本次启用PooledByteBufAllocator
- [feature] netty的WriteBufferWatermark,之前只能通过系统参数设置高低水位,本次修改成用户级的api方式设置参数,不同实例(RpcClient或者RpcServer)这个水位的参数设置,互不影响。
- [feature] 为了提供用户级的api方式设置参数,重构了参数设置的类。PropertiesManager类改成了ConfigManager。同时抽象了一个ConfigurableInstance供client与server继承。
- [feature] 在支持epoll的环境,开启支持epoll
- [feature] 支持对多个请求类型生效的用户处理器
tuning
- [tuning] 优化服务端给客户端返回的序列化异常的响应,之前没有带上causeBy导致客户端不能知道明确的异常,本次加上了这块的信息:包括服务端序列化响应异常与服务端反序列化请求异常。
- [tuning] 一些错误日志创建方式的优化,主要是用String.format来做格式化。
- [tuning] 服务端启动如果因为端口占用启动失败,之前不会抛异常,只是会提示启动失败。本次把异常抛出来,明确可以知道是端口占用导致启动失败。
- [tuning] 启动失败的时候,会触发初始化。之前没有把初始化的资源释放掉,本次修复了这个问题。启动失败后,会确保初始化的资源也释放掉。
- [tuning] RemotingServer抽象成接口,比当前的抽象类要好(逻辑更加清晰)
- [tuning] 重构ConnectionFactory,适配用户自定义协议。将registerUserProcessor方法从ConnectionFactory中移除,使ConnectionFactory的逻辑更加清晰,修复一些代码风格的问题
bugfix
- [bugfix] 修改全局开关(GlobalSwitch)的生效优先级,这里算是缺陷,比如之前系统级开关会优先于用户级开关生效。导致某一个客户端实例开启了重连等特性,其他实例也默认开启了。本次修改改成了用户参数优先生效。
- [bugfix] 服务端的排队超时快速失败开关,不生效。本次修复了此问题。
- [bugfix] 修复一些不影响用户的小缺陷,以及PMD检查出来的问题
- [bugfix] 修复DefaultConnectionManager日志对象获取错误的问题。
- [bugfix] 修复JDK1.6的CI编译问题
upgrade
- [upgrade] 因为安全原因,升级hessian到3.3.2
refactor
- Configs类与ProtocolSwitch类的包路径改动。跟配置相关的类都统一放在了com.alipay.remoting.config包下面。
v1.4.2 release
所有MR以及issue见milestone1.4.2,修改内容包括:
兼容性
该版本向前兼容v1.4.1
v1.4.2的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.25.Final</version>
</dependency>
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>bolt</artifactId>
<version>1.4.2</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>
主要改动
- 修复主线程结束后,bolt内部线程池没有自动关闭的问题。目前除了RpcServer的boss线程非daemon,其他都已改成daemon。具体见PR!31以及commit 0639872
- rpc server的初始化逻辑修改,抽象一个initRpcRemoting接口,子类可以覆写。
- 调整RemotingServer的启动逻辑,当重复启动时,抛IllegalStateException异常,与重复stop抛的异常一致。另外启动失败后,主动调用一个stop方法,为了状态一致并且释放已经init的资源。
- ByteBufAllocator初始化逻辑修改,以bolt的开关为准,bolt目前默认是UnpooledByteBufAllocator
- 日志修改:增加rootLogger,增加支持encoding系统参数:
"file.encoding"
- 格式修改:license头uses
/* ... */
instead of/** ... */
; - mvn插件修改:增加disable-javadoc-doclint,解决1.8下面的编译异常。
- netty版本从4.1.13.Final升级到4.1.25.Final
v1.4.1 release
本版本为向下兼容
v1.4.1的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.1</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>
主要改动
- [pom] 修复hessian的版本依赖问题,由内部版本改成开源版本,具体参考pom依赖
- [bugfix] 修改建连异常场景,1.4.0新引入的潜在NPE问题
v1.4.0 release
本版本为非向下兼容
- 从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. 其他
- 【优化】修改和完善注释,将中文改为英文。