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:
parent
2a5856ec99
commit
9e0a97916d
3 changed files with 26 additions and 4 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue