1.0.0.M1
版本发布时间: 2020-03-23 14:13:56
alibaba/alibaba-rsocket-broker最新发布版本:v1.1.5(2023-05-08 15:00:10)
距离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的深圳微信群的同学做了大量的稳定性测试。 接下来的版本,我们还会在特性开发上做更多的努力,当然稳定性方面的投入会逐渐增加,我们也希望能够加入试用队伍。
1、 alibaba-rsocket-broker-1.0.0.M1.tar.gz 83.38MB