JAVA SDK API · Sekiro系统文档 您所在的位置:网站首页 sdk用法 JAVA SDK API · Sekiro系统文档

JAVA SDK API · Sekiro系统文档

2023-03-15 08:01| 来源: 网络整理| 查看: 265

TreeviewCopyright © aleen42 all right reserved, powered by aleen42 javaAPI handler 设置action 实现ActionHandler 使用注解 获取参数 使用注解绑定 使用sekiroRequest手动获取参数: 使用内置json对象 定制线程池 sekiro生命周期监听 数据压缩 安装压缩处理器 数据返回的时候指定压缩算法 集群客户端 Invoker SekiroInvokerClient 鉴权 自定义服务器 请求方式 异步请求 同步请求 javaAPI

详细讲述Sekiro常用API

请注意!! 本文讲解Java版本sdk的API,这是由于目前在Java上对sdk功能的支持最完善,其他语言需要等待客户反馈酌量实现

handler

sekiroHandler是用于处理请求的处理器,他是一个抽象接口:

package cn.iinti.sekiro3.business.api.interfaze; public interface RequestHandler { void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse); }

您只需要实现当前接口,即将代码handler注册到sekiro中。

设置action

每个handler都必须有action,目前我们提供两种设置action的方法:

实现ActionHandler package cn.iinti.sekiro3.business.api.interfaze; public interface ActionHandler extends RequestHandler { String action(); } 使用注解 @Action("theAction") public class XXHandler implements RequestHandler { @Override public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) { //to something } } 获取参数

sekiro的所有参数都是打平包裹为json对象传递到handler中,你可以直接通过json对象API解析得到任何参数, 也可以使用我们的自动包装API或者注解。使用注解将会让代码非常优雅。

使用注解绑定

如下绑定param1参数到对应属性上

@AutoBind private String param1;

如下手动确定参数实际名称

@AutoBind("param1") private String param1;

如下确定本参数为必传参数:

@AutoBind(value="param1",require=true) private String param1;

如下设置参数默认值(当用户没有传递改参数的时候):

@AutoBind(value="param1",defaultValue="默认值") private String param1;

如下传递复杂对象(可以支持json,map,javabean等复杂对象,sekiro将会自动完成属性映射):

@AutoBind private JSONObject param1; 使用sekiroRequest手动获取参数: @Override public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) { String param1 = sekiroRequest.getString("param1"); boolean sleep = sekiroRequest.getBooleanValue("sleep"); double latitude = sekiroRequest.getDoubleValue("latitude"); } 使用内置json对象 @Override public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) { JSONObject jsonModel = sekiroRequest.getJsonModel(); String key = jsonModel.getString("key"); Byte b = jsonModel.getByte("b"); } 定制线程池

sekiro是一个异步框架,大部分情况sekiro的调用应该是不耗时,如果存在耗时,android客户端将会有自己的异步任务机制。 但是为了避免用户错误的使用sekiro导致任务卡顿,故Sekiro提供一个内置线城池。

HandlerThreadPool.setMaxWorkSize(100);

你可以通过类似上面的代码设置线程池参数,请注意sekiro内置线程池非常简单,如果您的业务发生了线程池的深度定制需求,请自定将handler业务逻辑放到自己的线程池中执行即可。

sekiro生命周期监听

如果你对sekiro的创建,使用,销毁等生命周期感兴趣,可以通过监听器获得生命周期的回调。 如下:

package cn.iinti.sekiro3.business.api.bootstrap; import cn.iinti.sekiro3.business.api.ClusterSekiroClient; import cn.iinti.sekiro3.business.api.SekiroClient; import cn.iinti.sekiro3.business.api.core.eventbus.event.client.SekiroClientConnectEvent; import cn.iinti.sekiro3.business.api.core.eventbus.event.client.SekiroClientDestroyEvent; import cn.iinti.sekiro3.business.api.core.eventbus.event.client.SekiroClientDisConnectedEvent; import cn.iinti.sekiro3.business.api.core.eventbus.event.cluster.ClusterClientDestroyEvent; import cn.iinti.sekiro3.business.api.interfaze.*; class ClusterClientTest { public static void main(String[] args) throws InterruptedException { // https://sekiro.iinti.cn/business/invoke?group=test&action=test&sekiro_token=123 ClusterSekiroClient sekiroClient = new ClusterSekiroClient("test") .setupSekiroRequestInitializer(new SekiroRequestInitializer() { @Override public void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) { handlerRegistry.registerSekiroHandler(new ActionHandler() { @Override public String action() { return "test"; } @Override public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) { sekiroResponse.success("param:" + sekiroRequest.getString("param")); } }); } }) .addSekiroClientEventListener(new SekiroClientConnectEvent() { @Override public void onClientConnected(SekiroClient sekiroClient1) { System.out.println(sekiroClient1.getClientKey() + ": 连接"); } }) .addSekiroClientEventListener(new SekiroClientDisConnectedEvent() { @Override public void onClientDisConnected(SekiroClient sekiroClient12) { System.out.println(sekiroClient12.getClientKey() + ": 断开"); } }) .addSekiroClientEventListener(new SekiroClientDestroyEvent() { @Override public void onClientDestroy(SekiroClient sekiroClient13) { System.out.println(sekiroClient13.getClientKey() + ": 销毁"); } }) .addClusterClientEventListener(new ClusterClientDestroyEvent() { @Override public void onDestroy(ClusterSekiroClient clusterSekiroClient) { System.out.println("集群client销毁"); } }) .start(); Thread.sleep(20000); sekiroClient.destroy(10); } } 数据压缩

Sekiro支持对传输报文进行压缩,并且默认开启了gzip压缩,这会显著降低您服务器带宽消耗。 正常情况下,也不需要对压缩算法进行过多的调优,但是您依然可以设置压缩算法,以及决定何种数据需要进行何种压缩算法。

安装压缩处理器 SekiroClient sekiroClient = new SekiroClient("test-xposed", UUID.randomUUID().toString()); sekiroClient.getCompressorManager().registerCompressor(new Compressor() { @Override public String method() { return "MY_COMPRESSOR"; } @Override public byte[] compress(byte[] input) throws IOException { // to compress and change byte array return input; } @Override public byte[] decompress(byte[] input) throws IOException { // to decompress and change byte array return input; } }); sekiroClient .setupSekiroRequestInitializer(new SekiroRequestInitializer() { @Override public void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) { handlerRegistry.registerSekiroHandler(new ClientTimeHandler()); } }); 数据返回的时候指定压缩算法 @Override public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) { sekiroResponse.userCompressMethod("MY_COMPRESSOR"); sekiroResponse.success("data"); } 集群客户端

目前并没有发现任何业务场景单台sekiro服务器无法支撑业务,所以集群客户端在这里单独说明, 如果您的业务没有发生多台服务器节点性能瓶颈,那么不建议您查看本章节内容。

使用ClusterSekiroClient即可以走集群模式,集群模式会同时创建多台服务器的连接,并同时接受多台服务器的转发任务。 实现多个节点的load balance

ClusterSekiroClient sekiroClient = new ClusterSekiroClient("test") .setupSekiroRequestInitializer(new SekiroRequestInitializer() { @Override public void onSekiroRequest(SekiroRequest sekiroRequest, HandlerRegistry handlerRegistry) { handlerRegistry.registerSekiroHandler(new ActionHandler() { @Override public String action() { return "test"; } @Override public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) { sekiroResponse.success("param:" + sekiroRequest.getString("param")); } }); } }).start(); Invoker

「SekiroInvokerClient」,使用方式类似于 OkHttp,如果在 Java 环境下调用建议使用该客户端。 对比 Http 调用方式有以下优势:

SekiroInvokerClient 启动后会和所有中央服务器保持长连接,这样如果Sekiro服务器部署了多台副本,则任意一台副本宕机不会导致调用失败 业务使用方通道和业务提供方通道协议完全一致,Sekiro Nat 服务器不需要做协议转换工作 Sekiro Nat 服务器不需要做解压、压缩等工作,在两条通道直接进行透明转发 SekiroInvokerClient 鉴权

使用token鉴权,如果是开源版本,或者匿名group,则token填写空字符即可

package cn.iinti.sekiro3.business.samples; import cn.iinti.sekiro3.business.api.SekiroInvoker; import cn.iinti.sekiro3.business.api.invoker.Call; import cn.iinti.sekiro3.business.api.invoker.Callback; import cn.iinti.sekiro3.business.api.invoker.InvokerRequest; import cn.iinti.sekiro3.business.api.invoker.InvokerResponse; import java.io.IOException; public class SekiroInvokerStart { public static void main(String[] args) { SekiroInvoker sekiroInvoker = new SekiroInvoker("7cd51507-cb3a-4a8a-aba2-4c6d66906e9d"); InvokerRequest invokerRequest = new InvokerRequest.Builder() .group("test") .action("test") .field("param", "testParam") .build(); sekiroInvoker.newCall(invokerRequest).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, InvokerResponse response) { System.out.println(response.string()); } }); } } 自定义服务器

如果部署了自己的 Sekiro 集群服务器,那么调用时就需要指定自己的服务器。如下进行设定:

SekiroInvokerClient sekiroInvoker = new SekiroInvoker("7cd51507-cb3a-4a8a-aba2-4c6d66906e9d",new Stirng[]{"sekiro.iinti.cn:5612"}); 请求方式

SekiroInvokerClient 支持同步请求和异步请求两种方式,sekiro天然支持异步,所以更建议使用异步方式调用

异步请求 package cn.iinti.sekiro3.business.samples; import cn.iinti.sekiro3.business.api.SekiroInvoker; import cn.iinti.sekiro3.business.api.invoker.Call; import cn.iinti.sekiro3.business.api.invoker.Callback; import cn.iinti.sekiro3.business.api.invoker.InvokerRequest; import cn.iinti.sekiro3.business.api.invoker.InvokerResponse; import java.io.IOException; public class SekiroInvokerStart { public static void main(String[] args) { SekiroInvoker sekiroInvoker = new SekiroInvoker("7cd51507-cb3a-4a8a-aba2-4c6d66906e9d"); InvokerRequest invokerRequest = new InvokerRequest.Builder() .group("test") .action("test") .field("param", "testParam") .build(); sekiroInvoker.newCall(invokerRequest).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); } @Override public void onResponse(Call call, InvokerResponse response) { System.out.println(response.string()); } }); } } 同步请求 package cn.iinti.sekiro3.business.samples; import cn.iinti.sekiro3.business.api.SekiroInvoker; import cn.iinti.sekiro3.business.api.invoker.Call; import cn.iinti.sekiro3.business.api.invoker.Callback; import cn.iinti.sekiro3.business.api.invoker.InvokerRequest; import cn.iinti.sekiro3.business.api.invoker.InvokerResponse; import java.io.IOException; public class SekiroInvokerStart { public static void main(String[] args) { SekiroInvoker sekiroInvoker = new SekiroInvoker("7cd51507-cb3a-4a8a-aba2-4c6d66906e9d"); InvokerRequest invokerRequest = new InvokerRequest.Builder() .group("test") .action("test") .field("param", "testParam") .build(); InvokerResponse execute = sekiroInvoker.newCall(invokerRequest).execute(); System.out.println(execute.string()); } } © 2021 iinti, Made by iinti Co.Ltd all right reserved,powered by Gitbook该文件最后修改时间: 2023-03-03 20:57:59


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有