
# SDK接口介绍
SDK中定义了多种类对象，本小节简单介绍SDK的这些类的接口定义。
- SubscribeContext接口定义
  表1SubscribeContext接口定义 
  | **函数名称**                         | **说明**                                                                                                |
  |:---|:---|
  | setDomainName(String domainName) | 设置用户名。 参数为创建所需数据订阅任务的IAM主账号名。                                 |
  | setUserId(String userId)         | 用户ID。 登录控制台之后，单击右上角"账户名 \> 我的凭证 \> 用户ID"，复制用户ID即可，主账号或子账号ID。 |
  | setPassword(String password)     | 设置用户密码。 参数为创建所需数据订阅任务的IAM主账号或子账号密码。                         |
  | setIp(String ip)                 | 设置订阅通道的IP。 在数据订阅页面，选择指定订阅任务，单击任务名称，在基本信息页签下，获取订阅实例信息的内部IP即可。 |
     
  
- ClusterClient接口定义
  表2ClusterClient接口定义 
  | **函数名称**                                      | **说明**                                                                                                                               |
  |:---|:---|
  | void addClusterListener(ClusterListener var1) | 添加下游监听者。监听者加入到一个ClusterClient中，才可以订阅订阅通道中的增量数据。 参数ClusterListener arg0 为类ClusterListener的对象。 |
  | void start()                                  | 启动SDK客户端，开始订阅增量数据。                                                                                                                   |
  | void stop()                                   | 停止订阅增量数据。                                                                                                                            |
     
  
- ClusterListener接口定义
  表3ClusterListener接口定义 
  | **函数名称**                                 | **说明**                                                                                                                                                                                                                                                                                                                                                               |
  |:---|:---|
  | void notify(List\<ClusterMessage\> var1) | 该函数主要用于定义增量数据的消费。当SDK接收到数据时，会通过notify通知ClusterListner消费数据。例如[SDK使用模板](https://support.huaweicloud.com/datasub-drs/drs_15_0006.html#ZH-CN_TOPIC_0148432855__section14870536164719)的消费方式，就是将订阅数据打印到屏幕上。 该函数输入参数类型为：List \<ClusterMessage\>, 其中ClusterMessage为订阅数据存储的结构对象，具体定义详见[表4]。 |
     
  
- ClusterMessage接口定义 每个ClusterMessage保存RDS中的一个事务的数据记录，事务中的每条记录通过Record保存。
   表4ClusterMessage接口定义 
  | **函数名称**           | **说明**                                                                                 |
  |:---|:---|
  | Record getRecord() | 该接口从ClusterMessage中获取一条变更记录。这个变更记录表示RDS的binlog文件中的每一条记录，例如begin，commit，update，insert等。 |
     
  
- Record接口定义 Record代表订阅的RDS的binlog文件中的每条记录，例如begin，commit，update等。
  表5Record接口定义 
  | **函数名称**                              | **说明**                                                                                                                                                                                                  |
  |:---|:---|
  | String getAttribute(final String key) | 该函数可以获取Record中主要的一些属性值。传入参数为属性名，返回这个属性的值。 可以调用这个函数获取的属性名及对应的属性值如[表6]所示。                                             |
  | Type getOpt()                         | 获取这条记录的变更类型，包括： insert、delete、update、replace、ddl、begin、commit、heartbeat。                                                                                                                                |
  | String getCheckpoint()                | 获取这条变更记录在binlog中的位点，返回的位点格式为：binlog_offset@binlog_fid。 其中binlog_offset为变更记录在binlog文件中的偏移量，binlog_fid为binlog文件的数字后缀，例如binlog文件名为mysql-bin.00092，那么binlog_fid为92。 |
  | int getFieldCount()                   | 获取这条变更记录的字段Field的个数。                                                                                                                                                                                    |
  | List \<Field\> getFieldList()         | 该函数返回结果的数据类型为List \<Field\>。 List \<Field\> 包含了这条变更记录对应表的所有字段的定义及变更前后的镜像值，Field对象的定义详见[表7]。                       |
     
   表6属性信息 
  | **key**          | **说明**                                                                          |
  |:---|:---|
  | record_id        | 这条Record的ID，这个ID在订阅过程中不保证递增。                                                    |
  | instance         | 这条Record对应的数据库实例的连接地址，格式为：ip:port。                                              |
  | source_type      | 这条Record对应数据库实例的引擎类型，目前只支持MySQL。                                                |
  | source_category  | 这条Record的类型，目前只支持full_recorded。                                                 |
  | timestamp        | 这条Record写入binlog的时间，这个时间同时也是这条SQL在RDS中执行的时间。                                    |
  | checkpoint       | 这条Record对应的binlog文件的位点，格式为:file_offset@file_name，file_name为binlog文件的数字后缀。       |
  | record_type      | 这条Record对应的操作类型，主要取值包括：insert/update/delete/replace/ddl/begin/commit/heartbeat。 |
  | db               | 这条Record更新对应的数据库名。                                                              |
  | table_name       | 这条Record更新表的表名。                                                                 |
  | record_recording | 这条Record对应的编码。                                                                  |
  | seqno            | 数据位点，DRS做位点的时候使用的。                                                              |
  | fragno           | 保留字段，以前判断是否为事务分片使用，现在无意义。                                                       |
  | isLastFrag       | 保留字段，以前判断是否为事务最后一个记录，现在无意义。                                                     |
     
  
- Field接口定义 Field类定义了每个字段的编码、类型、字段名、字段值以及是否为主键等属性，Field类的各个接口定义如[表7]所示。
   表7Field接口定义 
  | **函数名称**              | **说明**                                |
  |:---|:---|
  | String getEncoding()  | 获取该字段值的编码格式。                          |
  | String getFieldname() | 获取该字段的名称。                             |
  | Type getType()        | 获取该字段的数据类型，Type的定义具体参见字段类型定义。         |
  | ByteString getValue() | 获取该字段的值，返回类型为ByteString,当值为空时，返回NULL。 |
  | Boolean isPrimary()   | 判断该字段是否是表的主键列，如果是返回True，否则返回False。    |
     
  
 
