TableStore實時資料通道服務GoSDK快速入門
Tunnel Service Go SDK
[]()安裝
- 下載原始碼包
go get github.com/aliyun/aliyun-tablestore-go-sdk/tunnel
-
安裝依賴
-
可以在tunnel目錄下使用dep安裝依賴
- 安裝dep
- dep ensure -v
- 也可以直接使用go get安裝依賴包:
-
go get -u go.uber.org/zap
go get github.com/cenkalti/backoff
go get github.com/golang/protobuf/proto
go get github.com/satori/go.uuid
go get github.com/stretchr/testify/assert
go get github.com/smartystreets/goconvey/convey
go get github.com/golang/mock/gomock
go get gopkg.in/natefinch/lumberjack.v2
[]()快速開始
- 初始化Tunnel client:
// endpoint是表格儲存例項endpoint,如https://instance.cn-hangzhou.ots.aliyun.com
// instance為例項名稱
// accessKeyId和accessKeySecret分別為訪問表格儲存服務的AccessKey的Id和Secret
tunnelClient := tunnel.NewTunnelClient(endpoint, instance,
accessKeyId, accessKeySecret)
- 建立新Tunnel:
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)
- 獲取已有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)
- 註冊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.DeleteTunnelRequest {
TableName: "testTable",
TunnelName: "testTunnel",
}
_, err := tunnelClient.DeleteTunnel(req)
if err != nil {
log.Fatal("delete test tunnel failed", err)
}
[]()配置項
- tunnel client配置
初始化tunnel client時可以通過NewTunnelClientWithConfig介面自定義客戶端配置,使用不指定config初始化介面或者config為nil時會使用DefaultTunnelConfig:
var DefaultTunnelConfig = &TunnelConfig{
//最大指數退避重試時間
MaxRetryElapsedTime: 45 * time.Second,
//HTTP請求超時時間
RequestTimeout: 30 * time.Second,
//http.DefaultTransport
Transport: http.DefaultTransport,
}
- 資料消費worker配置
TunnelWorkerConfig中包含了資料消費worker需要的配置,其中ProcessorFactory為必填項,其餘欄位不填將使用預設值,通常使用預設值即可:
type TunnelWorkerConfig struct {
//worker同Tunnel服務的心跳超時時間,通常使用預設值即可
HeartbeatTimeout time.Duration
//worker傳送心跳的頻率,通常使用預設值即可
HeartbeatInterval time.Duration
//tunnel下消費連線建立介面,通常使用預設值即可
ChannelDialer ChannelDialer
//消費連線上具體處理器產生介面,通常使用callback函式初始化SimpleProcessFactory即可
ProcessorFactory ChannelProcessorFactory
//zap日誌配置,預設值為DefaultLogConfig
LogConfig *zap.Config
//zap日誌輪轉配置,預設值為DefaultSyncer
LogWriteSyncer zapcore.WriteSyncer
}
其中的ProcessorFactory為使用者註冊消費callback函式以及其他資訊的介面,建議使用SDK中自帶SimpleProcessorFactory實現:
type SimpleProcessFactory struct {
//使用者自定義資訊,會傳遞到ProcessFunc和ShutdownFunc中的ChannelContext引數中
CustomValue interface{}
//Worker記錄checkpoint的間隔,CpInterval<=0時會使用DefaultCheckpointInterval
CpInterval time.Duration
//worker資料處理的同步呼叫callback,ProcessFunc返回error時worker會用本批資料退避重試ProcessFunc
ProcessFunc func(channelCtx *ChannelContext, records []*Record) error
//worker退出時的同步呼叫callback
ShutdownFunc func(channelCtx *ChannelContext)
//日誌配置,Logger為nil時會使用DefaultLogConfig初始化logger
Logger *zap.Logger
}
- 日誌配置
預設日誌配置:
//DefaultLogConfig是TunnelWorkerConfig和SimpleProcessFactory使用的預設日誌配置
var DefaultLogConfig = zap.Config{
Level: zap.NewAtomicLevelAt(zap.InfoLevel),
Development: false,
Sampling: &zap.SamplingConfig{
Initial: 100,
Thereafter: 100,
},
Encoding: "json",
EncoderConfig: zapcore.EncoderConfig{
TimeKey: "ts",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
},
}
日誌輪轉配置:
//DefaultSyncer是TunnelWorkerConfig和SimpleProcessFactory使用的預設日誌輪轉配置
var DefaultSyncer = zapcore.AddSync(&lumberjack.Logger{
//日誌檔案路徑
Filename: "tunnelClient.log",
//最大日誌檔案大小
MaxSize: 512, //MB
//壓縮輪轉的日誌檔案數
MaxBackups: 5,
//輪轉日誌檔案保留的最大天數
MaxAge: 30, //days
//是否壓縮輪轉日誌檔案
Compress: true,
})
相關文章
- 滴滴資料通道服務演進之路
- yii2 restful web服務快速入門RESTWeb
- laravel基於remote model思想實現快速服務化(入門篇)LaravelREM
- 前端學習 node 快速入門 系列 —— 服務端渲染前端服務端
- KunlunDB 快速入門 4.0(從Oracle實時同步資料到kunlunDB)Oracle
- 實時計算Flink——快速入門概述
- [大資料之Spark]——快速入門大資料Spark
- 在資料庫繁忙時如何快速有效的關閉MySQL服務資料庫MySql
- 分析服務實時概覽資料助力開發者資料運營
- Flask服務入門案例Flask
- Redis快取資料庫-快速入門Redis快取資料庫
- 日誌服務資料匯入
- 資料庫事務入門指南資料庫
- 實時同步服務
- 【TVM 學習資料】TensorIR 快速入門
- Elasticsearch和向量資料庫的快速入門Elasticsearch資料庫
- Quartz任務排程快速入門quartz
- 在滴滴雲快速搭建自己的簡易服務叢集[入門版]
- 利用 FC + OSS 快速搭建 Serverless 實時按需影像處理服務Server
- Flex 3快速入門: 處理資料 使用資料繫結Flex
- 小白入門微服務(4) – 服務註冊與服務發現微服務
- 小白入門微服務(4) - 服務註冊與服務發現微服務
- Docker 系列 - 05 - 入門 & Puppeteer 服務Docker
- Docker 系列 - 03 - 入門 & Node 服務Docker
- 【Serverless】Unity快速整合認證服務實現郵件登入ServerUnity
- 快速入門資料結構和演算法資料結構演算法
- 快速入門大資料訊息中介軟體大資料
- 任務排程框架Quartz快速入門!框架quartz
- k8s-服務網格實戰-入門IstioK8S
- 快速入門一篇搞定RocketMq-實現微服務實戰落地MQ微服務
- 阿里雲資源編排服務JavaSDK使用入門阿里Java
- EMQX Cloud更新:資料整合新增 HStreamDB & TablestoreMQCloud
- Unity平臺 | 快速整合華為AGC雲資料庫服務UnityGC資料庫
- 功能解讀|快速上手 OceanBase 資料遷移服務
- Nuxt.js服務端渲染入門UXJS服務端
- 02 - 入門 & Nginx 服務 & Docker 概念【合集】NginxDocker
- 【go-web服務端】入門教程GoWeb服務端
- 快速排序快速入門排序