This repository has been archived by the owner on Jul 16, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 167
Customized Encoding
linux_china edited this page Feb 24, 2020
·
8 revisions
目前RSocket Broker在Java的Responder端提供以下序列化格式,并且服务提供端能够针对请求端的要求自行进行数据序列化适配。
- Hessian: Java应用默认的数据序列化格式
- JSON: JSON,如果你从Node或者浏览器端接入,建议使用JSON。
- Google Protobuf: Google Protobuf,如果你非常关注性能,而且不在意idl编写方式,可以考虑Protobuf
- Cbor: CBOR格式 https://cbor.io/
- Avro: Kafka主要采用Avro,可以考虑这种方式
- Java Object: Java原生Object序列化方式
- String: 基于UTF-8的字符串序列化
考虑到真实的场景中还有不少其他数据格式序列化的需求,也就是Customized Encoding,所以Alibaba RSocket Broker提供了自定义数据序列化。 步骤如下:
- 创建一个Java类,实现ObjectEncodingHandler接口,如你打算采用SBE(Simple Binary Encoding)进行数据序列化,就创建ObjectEncodingHandlerSbeImpl类,然后实现对应的逻辑
- 根据Java的ServiceLoader机制,进行Services加载。在资源目录下创建META-INF/services/com.alibaba.rsocket.encoding.ObjectEncodingHandler文件,然后输入ObjectEncodingHandlerSbeImpl对应类的全名
alibaba-rsocket-core会通过ServiceLoader机制自动完成自定义序列格式处理类的加载,并在通讯过程中进行数据自动序列化和反序列化。
RSocket已经支持单个Payload的数据编码设置,你可以参考 Stream Data MIME Types Metadata Extension
上述的格式同样多多语言场景有效,你只需要按照RSocket标准协议进行设置即可。
- Binary: byte stream
- Async message
- Multi transports
- Reactive Semantics
- request/response
- request/stream
- fire-and-forget
- channel
- TCP+TLS
- WebSocket+TLS
- UDP(Aeron)
- RDMA