Skip to content
This repository has been archived by the owner on Jul 16, 2024. It is now read-only.

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标准协议进行设置即可。

RSocket

Network Protocol

  • Binary: byte stream
  • Async message
  • Multi transports
  • Reactive Semantics

Symmetric interactions

  • request/response
  • request/stream
  • fire-and-forget
  • channel

Transports

  • TCP+TLS
  • WebSocket+TLS
  • UDP(Aeron)
  • RDMA

Polyglot

Clone this wiki locally