This repository has been archived by the owner on Jul 16, 2024. It is now read-only.
Releases: alibaba/alibaba-rsocket-broker
Releases · alibaba/alibaba-rsocket-broker
1.0.0.RC3
特性调整
- 添加Spring Cloud Function接入样例: https://github.com/alibaba/alibaba-rsocket-broker/blob/master/example/rsocket-cloud-function/README.md
- 增加连接过程中单个或多个服务上下线,如一些应用中,服务比较多,一些服务不可用时,可以做单个服务下线处理
- 调整RSocket多端口监听展现和元信息上报,可以同时展现RSocket监听的多端口信息
- 请求方的Remote IP获取和展现
- 添加flatbuffers & Cap’n Proto序列化框架类型声明
- RSocket Java 1.1.0和Spring Boot 2.4.0兼容: alibaba-rsocket-core和alibaba-rsocket-spring-boot-starter,服务可以使用Spring Boot 2.4接入到RSocket Broker,但是RSocket Broker目前只支持Spring Boot 2.3.x和RSocket 1.0.x,主要是gossip SDK还未能和Reactor Netty 1.0.0的兼容。
Bug修复
- 修复server.port=0随机端口注册情况
- 修复Gossip广播时一致性hash的bug,感谢 @jimichan
文档
- 增加RSocket Spring Boot actuator文档: https://github.com/alibaba/alibaba-rsocket-broker/wiki/Rsocket-Actuator
- 增加了RSocket Broker的服务规划: https://github.com/alibaba/alibaba-rsocket-broker/wiki/RSocket-Services
1.0.0.RC2
特性调整
- Upgrade to Reactor BOM Dysprosium-SR12
- Upgrade to JUnit 5.7.0
- Upgrade to Undertow 2.2.0
- jbang script support: https://github.com/alibaba-rsocket-broker/jbang-examples
Bug修复
- 取消gRPC的stream操作超时
- 修复自定义服务名的bug #83
文档
1.0.0.RC1 Release Notes
特性调整
- Kotlin 1.4.0 & Kotlinx Coroutines 1.3.9
- Kotlinx Serialization 1.0.0-RC: 不兼容之前版本,且Kotlin版本需为1.4.0+
- RSocket http gateway uses "/api" as prefix to route RSocket services
Bug修复
- 修复RSocket Channel通讯时switchOnFirst的bug
- 修复example中alibaba-rsocket-core依赖错误
文档
- Alibaba RSocket Broker Example Docs: https://github.com/linux-china/alibaba-broker-example-parent/tree/master/book/src
1.0.0.M3 Release Notes
特性调整
- Configuration调至为基于H2 MVStore,支持配置持久化到磁盘
- 升级到Vaadin 14.3.0,方便后续Modeless, resizable and draggable对话框,Spring Boot devtools支持
- ScaleCube Gossip更新至2.6.0-RC7,支持Jackson 2.11
- Sticky Session: 一个service的请求始终由某一服务提供者处理,不会做在多个服务提供者随机分发 https://github.com/alibaba/alibaba-rsocket-broker/wiki/RSocket-Routing
- 负载均衡: 添加了健康度检查超时,添加返回状态码判断
- 升级到Spring Boot 2.3.2,样例增加了Spring Boot RSocket接口调用支持
Bug修复
- 修复Windows下WellKnownMimeType类重名bug
- 修改config推送应用名在broker上未设定的bug
- Spring Boot Devtools兼容测试
文档
- SDK端Load Balance架构: https://github.com/alibaba/alibaba-rsocket-broker/wiki/RSocket-SDK-LoadBalance
为何有WellKnownMimeType类重名问题
为何要创建一个重名的WellKnownMimeType类? 这里主要是考虑MimeType扩展的问题。 RSocket Java SDK中,WellKnownMimeType是enum,
这表示非常难以扩展,但是在实际的企业内部,你可能还会使用到特定MimeType,如FlatBuffers,MessagePack等,但是这些都没有被WellKnownMimeType收纳,
我们希望通过同名类的覆盖机制,方便你自行添加对应的MimeType,方便你使用其他类型进行数据传输的序列化和反序列化。 如果有问题,欢迎反馈给我们。
1.0.0.M2 Release Notes
新特性
- Zipkin Tracing 和 Prometheus Metrics集群化支持 https://github.com/alibaba/alibaba-rsocket-broker/wiki/Alibaba-RSocket-Broker-Observability
- Kotlin Coroutines支持:使用suspend method和Flow编写Reactive Service接口
- Kotlin serialization支持: Cbor 和 Protobuf
- RSocket Cluster: 支持Internet和Intranet接入,同时支持Cluster节点之间的jsonrpc调用
- IoT接入优化: 支持基于一致性Hash算法的单连接接入
- gRPC优化: 支持全类型gRPC通讯方式
内部调整
- RSocket Java 1.0.0发布啦 🌹
- ByteBuddy替换JDK Proxy,性能提升
- 添加Origin Metadata: 服务提供方可以知道了解调用方的信息
- 升级到Spring Boot 2.3.0: Reactive支持更好啦,内置R2DBC支持
- Docker镜像生成: 同时支持jib & buildpack,方便自定义Docker镜像生成
文档
- 基于JWT的安全验证的详细文档说明
- Circuit Break和Back Pressure区别,同时增加了限流方案 https://github.com/alibaba/alibaba-rsocket-broker/wiki/Circuit-Breaker-Back-Pressuire
当然还有更多的bug修复、开发包升级和性能测试,这里就不一一列举啦。 欢迎试用并给出反馈。
Alibaba RSocket Broker MileStone 1
距离Alibaba RSocket Broker宣布开源已经有三个月,也迎来了第一次里程碑版本发布。
在这三个月时间内,我们的核心精力主要集中在产品特性开发上,我们希望这些特性能够帮助更多的开发者拥抱RSocket,接下来我们将对这些特性向大家进行介绍。
通用特性
服务路由
- 全新的二进制路由规范,只需要8个bytes就可以完成路由,这个保证broker在做消息转发的最高性能,请参考 https://github.com/alibaba/alibaba-rsocket-broker/wiki/RSocket-Routing
- 标准的RSocket路由规范实现,兼容Spring RSocket路由规范,使用RSocketRequester可以直接接入RSocket Broker并访问RSocket服务
- 支持endpoint(ip,id匹配)和元信息匹配路由,策略更加灵活。
@Bean
public UserService userService(UpstreamManager upstreamManager) {
return RSocketRemoteServiceBuilder
.client(UserService.class)
.upstreamManager(upstreamManager)
//.endpoint("ip:192.168.1.2")
.build();
}
序列化
- Hessian: 兼容Java8日期类型、Optional,兼容Dubbo Hessian Lite。自行扩展也非常容易,如扩展支持Joda Time, Java Money等,你只需要在你的SDK添加META-INF/hessian/serializers就可以,不需要额外配置
- 多种序列化支持: JSON, Protobuf, Apache Avor, Cbor等,可自行扩展
流式数据
- 流式数据支持: ByteBuf,如果你使用RSocket来传二进制数据、图片、视频等,非常高效。 请参考 https://github.com/alibaba/alibaba-rsocket-broker/wiki/RSocket-Binary
@GetMapping(value = "/{id}", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
public Mono<ByteBuffer> user(@PathVariable Integer id) {
return userServiceExtra.findById(id);
}
应用接入
Spring Boot支持
- 只需添alibaba-rsocket-spring-boot-starter依赖即可
- 完备的actuator信息,访问 /actuator/rsocket
- 于标准的Spring RSocket兼容,你可以通过Spring RSocketRequester来访问RSocket服务
return rsocketRequester.route("com.alibaba.user.UserService.findById").data(id).retrieveMono(User.class);
多语言支持
- Java: 基于标准的Java Interface定义服务接口,同时支持RxJava 2&3适配
- JavaScript in Browser & Node.js
- Python
- Ruby
- Golang
- Rust & WebAssembly接入
安全标准
- 应用接入使用JWT RSA验证,保证接入安全,同时JWT Token内置Service Account和ACL支持
- 同时支持多租户方案,可以适用于合作伙伴接入、多云环境部署、Edge端接入和隐私服务隔离等,可自定义不同合作伙伴或者网络环境的安全策略,保证中心服务的安全
稳定性和性能
- Load Balance支持: 应用和Broker之间完备的复杂均衡支持,同时可为Spring Boot的RSocketRequester提供负载均衡支持
- 完备的容错支持: 健康度检查、失败重试等
- 支持服务消费者和服务提供者直接调用,可支持性能极致要求场景
- 所以系统异常都包括错误码,更方便你定位问题
RSocket Broker
- 基于Gossip的集群管理: 支持集群广播和Broker实例之间相调用,无外部服务依赖,集群自管理
- 外部网络应用接入支持: 无需VPN,直接支持外部应用接入,如多云环境、Edge环境等
- 多协议支持: 如内部网络TCP通讯,外部应用以WebSocket接入
- Observability: Metrics反向采集,也就是通过broker采集应用的metrics信息, Tracing的支持
- Filter支持: 你可以编写自己的Filter实现诸如动态路由、日志打印、Metrics等。
- 支持A/B测试,不同应用实例的权重配置支持,支持动态调整流量比例
- 完备的控制台:方便你快速了解集群信息、信息。基于Vaadin开发,可自行添加自定管理界面,开发成本非常低
- HTTP REST API网关: 通过HTTP直接调用RSocket服务,
- gRPC网关: 通过gPRC接口调用RSocket服务 https://github.com/alibaba/alibaba-rsocket-broker/tree/master/alibaba-broker-grpc-gateway
- 内置配置推送服务接口: 你可以自行扩展接入Consul、etcd, ZooKeeper等
- 基于标准的CloudEvents格式进行事件推送,同时增加了事件处理后回发确认的机制,方便进行数据验证
开发支持
- Broker的StandAlone版本,更方便开发
- 提供endpoint支持:如访问指定服务器的服务,方便你进行开发调试
- Docker镜像支持,Docker Compose快速启动
version: "3"
services:
alibaba-rsocket-broker:
image: linuxchina/alibaba-rsocket-broker:1.0.0.M1
ports:
- "9997:9997"
- "9998:9998"
- "9999:9999"
其他整合
除此之外,我们还提供了一些整合的样例提供给大家参考
- Zipkin with RSocket: 使用RSocket的Fire and Forget采集metrics,性能更极致
- Java Flight Recorder Event Streaming with RSocket: 通过RSocket协议接收JFR的事件流进行JVM诊断分析 https://github.com/linux-china/jfr-sockets
- xtermjs with RSocket: 通过WebConsole来管理你的Spring Boot应用,原理是Browser和后端服务的RSocket通讯 https://github.com/linux-china/xtermjs-spring-boot-starter
文档
- 产品Wiki: https://github.com/alibaba/alibaba-rsocket-broker/wiki
- RSocket by Example: http://rsocketbyexample.info
已知问题
在发布到Maven中心仓库时,我们犯了一个小错,搞错alibaba-rsocket-service-common的版本好,所以大家在使用时请务必添加以下依赖。
<dependency>
<groupId>com.alibaba.rsocket</groupId>
<artifactId>alibaba-rsocket-service-common</artifactId>
<version>1.0.0.M1</version>
</dependency>
<dependency>
<groupId>com.alibaba.rsocket</groupId>
<artifactId>alibaba-rsocket-spring-boot-starter</artifactId>
<version>1.0.0.M1</version>
</dependency>
Maven中心仓库地址为: https://repo1.maven.org/maven2/com/alibaba/rsocket/
感谢
非常感谢Reactive的深圳微信群的同学做了大量的稳定性测试。
接下来的版本,我们还会在特性开发上做更多的努力,当然稳定性方面的投入会逐渐增加,我们也希望能够加入试用队伍。