当前位置: 首页>编程语言>正文

iotdb 源码分析(2) -- iotdb thrift

thrift 简介

thrift 最初由 facebook 开发 , 开源的。Thrift 是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引 擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。注意特征: 跨语言,所以后端开源软件都在使用,比如 Cassandra , hbase 等等。

iotdb 源码分析(2) -- iotdb thrift,第1张
image.png

使用:

以 java 为例,只需要定义好接口,以及服务端实现,其他的 远程调用 模型,编解码,通过配置,就可以使用,不需要自己关心。
比如:定义 thrift 接口文件:HelloWorldService.thrift

namespace * com.jd.iot.mapan
/**
* 测试接口sayhello
**/
service  HelloWorldService {
  /**
  * sayhello
  * Parmas:
  * username:用户名
    **/
  string sayHello(1:string username),
}

通过 thrift 编译,会生成 1000 多行的代码类:
生成如下的类:

public class HelloWorldService

iotdb 源码分析(2) -- iotdb thrift,第2张
image.png

定义实现:

iotdb 源码分析(2) -- iotdb thrift,第3张
image.png

我们看到,在 thrift 生成的代码里面,包括一个接口 HelloWorldService.Iface 接口,只需要实现此接口就行

public class HelloWorldServiceImpl   implements  HelloWorldService.Iface{
    @Override
    public String sayHello(String username) throws TException {
        return null;
    }
}

所以,这个 RPC 调用的逻辑,可以不用关心他的中间调用过程,只需要查看他 实现代码逻辑就可以了。

iotdb 源码分析(2) -- iotdb thrift,第4张
image.png

iotdb thrift 调用:

查看 iotdb 源码,包括如下的 thrift 代码:


iotdb 源码分析(2) -- iotdb thrift,第5张
image.png

| 文件 | 说明 | |
| client.thrift | 客户端调用的代码,例如 : client 调用, | |
| confignode.thrift | confignode 提供的 RPC 接口 | |
| datanode.thrift | datanode 提供的 RPC 接口 | |

client RPC 接口:

总共 47 方法, 这个就是 iotdb client 端操作调用的所有的接口,所有的实现在 IClientRPCServiceWithHandler 类中,实现类如下:

iotdb 源码分析(2) -- iotdb thrift,第6张
image.png

两个的区别:

TSServiceImpl : iotdb 老单机模式云端的实现

ClientRPCServiceImpl : iotdb 分布式模式调用的实现, 以及,在第一篇文章里面写的, iotdb 提供了一个 start-new-server.sh 里面 单机模式的 实现,

具体的实现,后面文章再写。

client.thrift :

service IClientRPCService {
  TSOpenSessionResp openSession(1:TSOpenSessionReq req);

  common.TSStatus closeSession(1:TSCloseSessionReq req);

  TSExecuteStatementResp executeStatement(1:TSExecuteStatementReq req);

  common.TSStatus executeBatchStatement(1:TSExecuteBatchStatementReq req);

  TSExecuteStatementResp executeQueryStatement(1:TSExecuteStatementReq req);

  TSExecuteStatementResp executeUpdateStatement(1:TSExecuteStatementReq req);

  TSFetchResultsResp fetchResults(1:TSFetchResultsReq req)

  TSFetchMetadataResp fetchMetadata(1:TSFetchMetadataReq req)

  common.TSStatus cancelOperation(1:TSCancelOperationReq req);

  common.TSStatus closeOperation(1:TSCloseOperationReq req);

  TSGetTimeZoneResp getTimeZone(1:i64 sessionId);

  common.TSStatus setTimeZone(1:TSSetTimeZoneReq req);

  ServerProperties getProperties();

  common.TSStatus setStorageGroup(1:i64 sessionId, 2:string storageGroup);

  common.TSStatus createTimeseries(1:TSCreateTimeseriesReq req);

  common.TSStatus createAlignedTimeseries(1:TSCreateAlignedTimeseriesReq req);

  common.TSStatus createMultiTimeseries(1:TSCreateMultiTimeseriesReq req);

  common.TSStatus deleteTimeseries(1:i64 sessionId, 2:list path)

  common.TSStatus deleteStorageGroups(1:i64 sessionId, 2:list storageGroup);

  common.TSStatus insertRecord(1:TSInsertRecordReq req);

  common.TSStatus insertStringRecord(1:TSInsertStringRecordReq req);

  common.TSStatus insertTablet(1:TSInsertTabletReq req);

  common.TSStatus insertTablets(1:TSInsertTabletsReq req);

  common.TSStatus insertRecords(1:TSInsertRecordsReq req);

  common.TSStatus insertRecordsOfOneDevice(1:TSInsertRecordsOfOneDeviceReq req);

  common.TSStatus insertStringRecordsOfOneDevice(1:TSInsertStringRecordsOfOneDeviceReq req);

  common.TSStatus insertStringRecords(1:TSInsertStringRecordsReq req);

  common.TSStatus testInsertTablet(1:TSInsertTabletReq req);

  common.TSStatus testInsertTablets(1:TSInsertTabletsReq req);

  common.TSStatus testInsertRecord(1:TSInsertRecordReq req);

  common.TSStatus testInsertStringRecord(1:TSInsertStringRecordReq req);

  common.TSStatus testInsertRecords(1:TSInsertRecordsReq req);

  common.TSStatus testInsertRecordsOfOneDevice(1:TSInsertRecordsOfOneDeviceReq req);

  common.TSStatus testInsertStringRecords(1:TSInsertStringRecordsReq req);

  common.TSStatus deleteData(1:TSDeleteDataReq req);

  TSExecuteStatementResp executeRawDataQuery(1:TSRawDataQueryReq req);

  TSExecuteStatementResp executeLastDataQuery(1:TSLastDataQueryReq req);

  i64 requestStatementId(1:i64 sessionId);

  common.TSStatus createSchemaTemplate(1:TSCreateSchemaTemplateReq req);

  common.TSStatus appendSchemaTemplate(1:TSAppendSchemaTemplateReq req);

  common.TSStatus pruneSchemaTemplate(1:TSPruneSchemaTemplateReq req);

  TSQueryTemplateResp querySchemaTemplate(1:TSQueryTemplateReq req);

  common.TSStatus setSchemaTemplate(1:TSSetSchemaTemplateReq req);

  common.TSStatus unsetSchemaTemplate(1:TSUnsetSchemaTemplateReq req);

  common.TSStatus dropSchemaTemplate(1:TSDropSchemaTemplateReq req);

  common.TSStatus handshake(TSyncIdentityInfo info);

  common.TSStatus sendPipeData(1:binary buff);

  common.TSStatus sendFile(1:TSyncTransportMetaInfo metaInfo, 2:binary buff);
}

https://www.xamrdz.com/lan/5e41850430.html

相关文章: