solon-serialization-abc
此插件,由社区成员(rainbing)贡献
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-serialization-abc</artifactId>
</dependency>
1、描述
序列化扩展插件,为 Solon Serialization 提供基于 abc (基于定制的序列化方案)的框架适配。此插件,要求交互的数据为实体类!(实体类内部,可以有 Map 或 List 或 泛型)
这插件主要用作 Solon Rpc 的服务端序列化方案(v3.0.4 后支持),使用时,需要添加可选框架:
org.agrona:agrona:${agrona-sbe.version} # 提供 sbe 序列化支持
net.openhft:chronicle-bytes:${chronicle-bytes.version} # 提供 chronicle-bytes 序列化支持
solon-serialization-abc 是个开放的序列化插件,可以自由扩展与定制。
2、主要接口实现类
类 | 实现接口 | 备注 |
---|---|---|
AbcBytesSerializer | Serializer | abc 序列化器 |
AbcRender | Render | 用于处理 abc 渲染输出 |
AbcActionExecutor | ActionExecuteHandler | 用于执行 abc 内容的请求 |
何时会被时用?当 Content-Type 为 application/abc 时会执行。
3、应用示例
- 公用包(以 sbe 为例)
@ToString
@Setter
@Getter
public class MessageDo implements SbeSerializable { //定制时,只需要定义自己的序列化接口即可!
private long id;
private String title = "";
@Override
public void serializeRead(SbeInput in) {
id = in.readLong();
title = in.readString();
}
@Override
public void serializeWrite(SbeOutput out) {
out.writeLong(id);
out.writeString(title);
}
}
- 服务端(只支持 @Body 数据接收,只支持实体类)
@Mapping("/rpc/demo")
@Remoting
public class HelloServiceImpl {
@Override
public MessageDo hello(@Body MessageDo message) { //还可接收路径变量,与请求上下文
return message;
}
}
- 客户端应用 for HttpUtils(只支持 body 数据提交,只支持实体类)
#添加插件
org.noear:solon-net-httputils
//应用代码
@Component
public class DemoCom {
public MessageDo hello() {
MessageDo message = new MessageDo();
message.setId(3);
//指明请求数据为 PROTOBUF,要求数据为 PROTOBUF
return HttpUtils.http("http://localhost:8080/rpc/demo/hello")
.serializer(AbcBytesSerializer.getInstance())
.header(ContentTypes.HEADER_CONTENT_TYPE, ContentTypes.PROTOBUF_VALUE)
.header(ContentTypes.HEADER_ACCEPT, ContentTypes.PROTOBUF_VALUE)
.bodyOfBean(message)
.postAs(MessageDo.class);
}
}
- 客户端应用 for Nami(只支持 body 数据提交,只支持实体类)
#添加插件
org.noear:nami-coder-abc
org.noear:nami-channel-http
//应用代码
public interface HelloService {
MessageDo hello(@NamiBody MessageDo message);
}
@Component
public class DemoCom {
@NamiClient(url = "http://localhost:8080/rpc/demo", headers = {ContentTypes.ABC, ContentTypes.ABC_ACCEPT})
HelloService helloService;
public MessageDo hello() {
MessageDo message = new MessageDo();
message.setId(3);
rerturn helloService.hello(message);
}
}
4、示例代码
https://gitee.com/opensolon/solon-examples/tree/main/7.Solon-Remoting-Rpc/demo7031-nami-coder-abc