iis如何发布php网站,网站如何加入广告联盟,上海建设工程造价协会官网,黄石企业做网站1、认识 chronicle-bytes
Chronicle-Bytes 是一个类似于 Java NIO 的 ByteBuffer 的高效字节操作库#xff0c;但它提供了许多扩展功能。这个项目由 OpenHFT 开发并维护#xff0c;旨在提供高性能、低延迟的数据处理解决方案。Chronicle-Bytes 设计用于高频率交易和其他对性…1、认识 chronicle-bytes
Chronicle-Bytes 是一个类似于 Java NIO 的 ByteBuffer 的高效字节操作库但它提供了许多扩展功能。这个项目由 OpenHFT 开发并维护旨在提供高性能、低延迟的数据处理解决方案。Chronicle-Bytes 设计用于高频率交易和其他对性能有极端要求的场景它支持序列化和反序列化多种数据类型同时保持内存的高效利用。
2、了解下 rpc
一讲 rpc 很多人会想到 dubbo 国产和 grpc。估计还会联想到注册与发现服务可能还会联想到微服务。可能就会觉得这个事儿“老重啦”害怕
其实很简单的你请求一次 http 就是个 rpc 请求了远程过程调用嘛。最典型的就是 http json 请求了。
3、现在讲 httputils chronicle-bytes
这里我们会用到两个重要的 solon 框架的插件一个是 abc 序列化插件abc 适配了多个编解码方案其中有 chronicle-bytes一个是 httputils 工具插件。
!-- 这是 chronicle-bytes 的编解码包装器 --
dependencygroupIdorg.noear/groupIdartifactIdsolon-serialization-abc/artifactId
/dependencydependencygroupIdnet.openhft/groupIdartifactIdchronicle-bytes/artifactIdversion${chronicle-bytes.version}/version
/dependencydependencygroupIdorg.noear/groupIdartifactIdsolon-net-httputils/artifactId
/dependency这里要感谢 solon 框架它强调三元合一mvc 与 rpc 是自然一体的。下面开始干活啦…
公用包也可以在客户端服务端分别定义实体类。只要实现 ChrBytesSerializable 接口即可
这里定义一个 chronicle-bytes 实体类。注意要实现 ChrBytesSerializable 接口。
Getter
Setter
public class MessageDo implements ChrBytesSerializable {private long id;private String title;Overridepublic void serializeRead(BytesIn in) {id in.readLong();title in.readUtf8();}Overridepublic void serializeWrite(BytesOut out) {out.writeLong(id);out.writeUtf8(title);}
}服务端只支持 Body 数据接收只支持实体类
在 solon web 项目里添加一个控制器注解可以用 Remoting 或 Controller。使用 Remoting 时方法上不需要加 Mapping 注解。
#添加插件
org.noear:solon-web
org.noear:solon-serialization-abc
net.openhft:chronicle-bytes:${chronicle-bytes.version} # 提供 chronicle-bytes 序列化支持Mapping(/rpc/demo)
Remoting
public class HelloServiceImpl implements HelloService {Overridepublic MessageDo hello(Body MessageDo message) { //还可接收路径变量与请求上下文return message;}
}客户端应用 for HttpUtils只支持 body 数据提交只支持实体类
#添加插件
org.noear:solon-net-httputils
org.noear:solon-serialization-abc
net.openhft:chronicle-bytes:${chronicle-bytes.version} # 提供 chronicle-bytes 序列化支持//应用代码
Component
public class DemoCom {public MessageDo hello() {MessageDo message new MessageDo();message.setId(3);//指明请求数据为 ABC接收数据要 ABCreturn HttpUtils.http(http://localhost:8080/rpc/demo/hello).serializer(AbcBytesSerializer.getInstance()).header(ContentTypes.HEADER_CONTENT_TYPE, ContentTypes.ABC_VALUE).header(ContentTypes.HEADER_ACCEPT, ContentTypes.ABC_VALUE).bodyOfBean(message).postAs(MessageDo.class);}
}4、总结
总体上跟 json 没什么大的区别。主要是指定了序列化器、内容类型、接收类型让各端能识别类据类型。
5、还可以使用“注解式 http 客户端”框架
肯定也会有人觉得一个接口还好如果有很多接口就要写很多重复的http请求代码了。所以“注解式 http 客户端” 很重要这也是很多 rpc 框架流行的原因就像调用本地接口一样使用远程接口。
nami 是 solon 框架的 rpc 客户端或者注解式 http 客户端支持各种序列化。只要是“支持序列化定制”的注解式 http 客户端都可用
添加两个依赖包
#添加插件
org.noear:nami-coder-abc # abc 编解码支持
org.noear:nami-channel-http # http 请求通道支持也可以是 socketd支持 tcp, udp, ws
net.openhft:chronicle-bytes:${chronicle-bytes.version} # 提供 chronicle-bytes 序列化支持代码应用只支持 body 数据提交只支持实体类
NamiClient(url http://localhost:8080/rpc/demo, headers {ContentTypes.ABC, ContentTypes.ABC_ACCEPT})
public interface HelloService {MessageDo hello(NamiBody MessageDo message);//方法2//方法3//方法4//方法5//方法6
}Component
public class DemoCom {NamiClient //注入HelloService helloService;public MessageDo hello() {MessageDo message new MessageDo();message.setId(3);rerturn helloService.hello(message);}
}