全部产品

存证服务API

更新时间:2019-08-21 19:26:30

BaaS 提供自定义 RPC 协议来实现节点连接。以下介绍 Java SDK 实现的 API 客户端。

Client

Client 类是 antblockchain-gl API 通讯协议的实现,客户端是线程安全的,多线程可以显著提高 SDK 的性能,但不是越多越好,您需要根据实际需求测试最合理的线程数。

客户端采用延迟连接,创建后并不会立即与服务器连接,当发生接口调用时才会尝试连接服务器。默认的尝试次数是 3 次,每次都会先尝试连接主节点,接着连接所有的备份节点。一旦主节点连接失败,则会每隔固定时间(默认 10 秒)进行 1 次主连接尝试。如果此时正处于与备份节点的连接中,则会断开与备份节点的连接,重新选择主节点连接。

总之,由于联盟链网络一般都是跨机构,只有机构自己的节点(主节点)有最好的网络环境,其它备份节点(一般是别的机构的节点)的网络延迟都较大,所以客户端会尽可能选择主节点连接。

客户端没有请求失败重发机制,如果请求发送过程中连接断开导致请求发送失败,接口返回的 Reponse 会携带 errorMsg,是否重发请求由调用方决定。

客户端中的 netty 只有 1 个 IO 线程,与服务器的渠道连接也只有 1 个。IO 线程只处理读写,所有的业务逻辑都在业务线程池中处理。客户端使用的 SSL provider 是netty-tcnative-boringssl-static,会比 Java 自带的 provider 性能高。

Config

创建客户端需要ClientConfigClientConfig是一个接口,SDK提供默认的实现ClientPropertyConfigClientPropertyConfig通过读取properties文件获取配置。

ClientPropertyConfig 说明 必须
biz.sdk.primary 主节点api地址,主节点必须且只能配置1个 127.0.0.0:8080
biz.sdk.backups 备份节点api地址,备份节点可以配置0个或多个 127.0.0.0:8080;127.0.0.0:8081
biz.sdk.primary_auto_reconnect_interval 主节点失效后,自动尝试重连的间隔时间(秒为单位) 默认是10秒
biz.sdk.ssl_key pkcs8格式的ssl私钥文件绝对路径 默认是空
biz.sdk.ssl_cert x509格式的ssl证书文件绝对路径 默认是空
biz.sdk.ssl_key_password ssl私钥密码 默认是空
biz.sdk.trust_store trust store文件绝对路径 默认是空
biz.sdk.trust_store_password trust store密码 默认是空
biz.sdk.protocol 通信协议名字,如果为null,则使用默认的Protocol名字 默认是1.0
biz.sdk.biz_thread_pool_size 业务线程池大小,如果为非正数,则使用默认的业务线程池大小 默认是CPU核数*2
biz.sdk.read_idle_time 读空闲时间(秒为单位),超过该时间SDK会向Server发送Ping消息 默认是60秒
biz.sdk.send_one_way_message_timeout 单向消息发送超时时间(毫秒为单位),超过该时间就认为发送失败 默认15000
biz.sdk.wait_response_timeout 双向消息应答超时时间(毫秒为单位),超过该时间就认为应答失败 默认30000
biz.sdk.socket_send_buffer_size socket发送缓冲区大小,如果为非正数则使用java默认的缓冲区大小 默认0
biz.sdk.socket_recv_buffer_size socket接收缓冲区大小,如果为非正数则使用java默认的缓冲区大小 默认0
biz.sdk.tcp_no_delay 是否开启Nagle算法 默认false
biz.sdk.explicit_flush_after_flushes netty的flush合并策略阈值,如果为正数则开启flush合并 默认0

所有的API地址都可以有两种形式:127.0.0.1:8080或者127.0.0.1 8080

目前的测试网络中server没有开启ssl,所以client无需配置ssl参数。如果发送的请求比较大可以适当将socket发送缓冲区设置的大点。设置 tcp_no_delay 需要慎重,如果是单线程使用client且发送的包较小,则容易遇到40ms延迟问题。如果发送的包比较小且高频,可以尝试开启flush合并,对性能提升有帮助。