Use AWS resource iface, overwrite default dynamodb, more explicit in example about overwrite default AWS resrouce client (#49)

* use custom kinesis client

* use aws sdk interface, add missing api for ddb

* add overwrite default dynamodbclien usage
This commit is contained in:
Prometheus 2018-05-31 17:41:14 -07:00 committed by Harlow Ward
parent 2a5856ec99
commit 9e0a97916d
3 changed files with 26 additions and 4 deletions

View file

@ -11,6 +11,7 @@ import (
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb" "github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute"
"github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface"
) )
// Option is used to override defaults when creating a new Checkpoint // Option is used to override defaults when creating a new Checkpoint
@ -23,6 +24,13 @@ func WithMaxInterval(maxInterval time.Duration) Option {
} }
} }
// WithDynamoClient sets the dynamoDb client
func WithDynamoClient(svc dynamodbiface.DynamoDBAPI) Option {
return func(c *Checkpoint) {
c.client = svc
}
}
// New returns a checkpoint that uses DynamoDB for underlying storage // New returns a checkpoint that uses DynamoDB for underlying storage
func New(appName, tableName string, opts ...Option) (*Checkpoint, error) { func New(appName, tableName string, opts ...Option) (*Checkpoint, error) {
client := dynamodb.New(session.New(aws.NewConfig())) client := dynamodb.New(session.New(aws.NewConfig()))
@ -58,7 +66,7 @@ func New(appName, tableName string, opts ...Option) (*Checkpoint, error) {
type Checkpoint struct { type Checkpoint struct {
tableName string tableName string
appName string appName string
client *dynamodb.DynamoDB client dynamodbiface.DynamoDBAPI
maxInterval time.Duration maxInterval time.Duration
mu *sync.Mutex // protects the checkpoints mu *sync.Mutex // protects the checkpoints
checkpoints map[key]string checkpoints map[key]string

View file

@ -7,13 +7,14 @@ import (
"github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/kinesis" "github.com/aws/aws-sdk-go/service/kinesis"
"github.com/aws/aws-sdk-go/service/kinesis/kinesisiface"
) )
// ClientOption is used to override defaults when creating a KinesisClient // ClientOption is used to override defaults when creating a KinesisClient
type ClientOption func(*KinesisClient) type ClientOption func(*KinesisClient)
// WithKinesis overrides the default Kinesis client // WithKinesis overrides the default Kinesis client
func WithKinesis(svc *kinesis.Kinesis) ClientOption { func WithKinesis(svc kinesisiface.KinesisAPI) ClientOption {
return func(kc *KinesisClient) { return func(kc *KinesisClient) {
kc.svc = svc kc.svc = svc
} }
@ -36,7 +37,7 @@ func NewKinesisClient(opts ...ClientOption) *KinesisClient {
// KinesisClient acts as wrapper around Kinesis client // KinesisClient acts as wrapper around Kinesis client
type KinesisClient struct { type KinesisClient struct {
svc *kinesis.Kinesis svc kinesisiface.KinesisAPI
} }
// GetShardIDs returns shard ids in a given stream // GetShardIDs returns shard ids in a given stream

View file

@ -11,6 +11,11 @@ import (
"os" "os"
"os/signal" "os/signal"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/dynamodb"
"github.com/aws/aws-sdk-go/service/kinesis"
consumer "github.com/harlow/kinesis-consumer" consumer "github.com/harlow/kinesis-consumer"
checkpoint "github.com/harlow/kinesis-consumer/checkpoint/ddb" checkpoint "github.com/harlow/kinesis-consumer/checkpoint/ddb"
) )
@ -35,8 +40,11 @@ func main() {
) )
flag.Parse() flag.Parse()
// Following will overwrite the default dynamodb client
myDynamoDbClient := dynamodb.New(session.New(aws.NewConfig()))
// ddb checkpoint // ddb checkpoint
ck, err := checkpoint.New(*app, *table) ck, err := checkpoint.New(*app, *table, checkpoint.WithDynamoClient(myDynamoDbClient))
if err != nil { if err != nil {
log.Fatalf("checkpoint error: %v", err) log.Fatalf("checkpoint error: %v", err)
} }
@ -46,12 +54,17 @@ func main() {
logger = log.New(os.Stdout, "", log.LstdFlags) logger = log.New(os.Stdout, "", log.LstdFlags)
) )
// The following 2 lines will overwrite the default kinesis client
myKinesisClient := kinesis.New(session.New(aws.NewConfig()))
newKclient := consumer.NewKinesisClient(consumer.WithKinesis(myKinesisClient))
// consumer // consumer
c, err := consumer.New( c, err := consumer.New(
*stream, *stream,
consumer.WithCheckpoint(ck), consumer.WithCheckpoint(ck),
consumer.WithLogger(logger), consumer.WithLogger(logger),
consumer.WithCounter(counter), consumer.WithCounter(counter),
consumer.WithClient(newKclient),
) )
if err != nil { if err != nil {
log.Fatalf("consumer error: %v", err) log.Fatalf("consumer error: %v", err)