介绍如何使用Go SDK快速体验通道服务、获取通道信息和删除通道。

体验通道服务

使用通道服务的操作。

  1. 初始化Tunnel client。
    //endpoint是表格存储实例endpoint,例如https://instance.cn-hangzhou.ots.aliyun.com。
    //instance是实例名称。
    //accessKeyId和accessKeySecret分别为访问表格存储服务的AccessKey的Id和Secret。
    tunnelClient := tunnel.NewTunnelClient(endpoint, instance,
       accessKeyId, accessKeySecret)
    					
  2. 创建新通道。
    req := &tunnel.CreateTunnelRequest{
       TableName:  "testTable",
       TunnelName: "testTunnel",
       Type:       tunnel.TunnelTypeBaseStream, //全量加增量类型Tunnel
    }
    resp, err := tunnelClient.CreateTunnel(req)
    if err != nil {
       log.Fatal("create test tunnel failed", err)
    }
    log.Println("tunnel id is", resp.TunnelId)
  3. 用户自定义数据消费Callback,开始自动化的数据消费。
    //用户定义消费callback函数。
    func exampleConsumeFunction(ctx *tunnel.ChannelContext, records []*tunnel.Record) error {
        fmt.Println("user-defined information", ctx.CustomValue)
        for _, rec := range records {
            fmt.Println("tunnel record detail:", rec.String())
        }
        fmt.Println("a round of records consumption finished")
        return nil
    }
    
    //配置callback到SimpleProcessFactory,配置消费端TunnelWorkerConfig。
    workConfig := &tunnel.TunnelWorkerConfig{
       ProcessorFactory: &tunnel.SimpleProcessFactory{
          CustomValue: "user custom interface{} value",
          ProcessFunc: exampleConsumeFunction,
       },
    }
    
    //使用TunnelDaemon持续消费指定tunnel。
    daemon := tunnel.NewTunnelDaemon(tunnelClient, tunnelId, workConfig)
    log.Fatal(daemon.Run())

获取Tunnel信息

创建通道后,可以获取通道信息。

req := &tunnel.DescribeTunnelRequest{
   TableName:  "testTable",
   TunnelName: "testTunnel",
}
resp, err := tunnelClient.DescribeTunnel(req)
if err != nil {
   log.Fatal("create test tunnel failed", err)
}
log.Println("tunnel id is", resp.Tunnel.TunnelId)

删除Tunnel

删除不需要的通道。

req := &tunnel.DeleteTunnelRequest {
   TableName: "testTable",
   TunnelName: "testTunnel",
}
_, err := tunnelClient.DeleteTunnel(req)
if err != nil {
   log.Fatal("delete test tunnel failed", err)
}