init push
This commit is contained in:
54
internal/repository/sqs/resilient_api.go
Normal file
54
internal/repository/sqs/resilient_api.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package sqs
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/service/sqs"
|
||||
|
||||
"wucher/internal/resilience"
|
||||
)
|
||||
|
||||
type resilientAPI struct {
|
||||
next API
|
||||
executor *resilience.Executor
|
||||
}
|
||||
|
||||
func NewResilientAPI(next API, executor *resilience.Executor) API {
|
||||
if next == nil || executor == nil || !executor.Enabled() {
|
||||
return next
|
||||
}
|
||||
return &resilientAPI{
|
||||
next: next,
|
||||
executor: executor,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *resilientAPI) SendMessage(ctx context.Context, params *sqs.SendMessageInput, optFns ...func(*sqs.Options)) (*sqs.SendMessageOutput, error) {
|
||||
return resilience.Do(ctx, r.executor, func(ctx context.Context) (*sqs.SendMessageOutput, error) {
|
||||
return r.next.SendMessage(ctx, params, optFns...)
|
||||
})
|
||||
}
|
||||
|
||||
func (r *resilientAPI) ReceiveMessage(ctx context.Context, params *sqs.ReceiveMessageInput, optFns ...func(*sqs.Options)) (*sqs.ReceiveMessageOutput, error) {
|
||||
return resilience.Do(ctx, r.executor, func(ctx context.Context) (*sqs.ReceiveMessageOutput, error) {
|
||||
return r.next.ReceiveMessage(ctx, params, optFns...)
|
||||
})
|
||||
}
|
||||
|
||||
func (r *resilientAPI) DeleteMessageBatch(ctx context.Context, params *sqs.DeleteMessageBatchInput, optFns ...func(*sqs.Options)) (*sqs.DeleteMessageBatchOutput, error) {
|
||||
return resilience.Do(ctx, r.executor, func(ctx context.Context) (*sqs.DeleteMessageBatchOutput, error) {
|
||||
return r.next.DeleteMessageBatch(ctx, params, optFns...)
|
||||
})
|
||||
}
|
||||
|
||||
func (r *resilientAPI) ChangeMessageVisibility(ctx context.Context, params *sqs.ChangeMessageVisibilityInput, optFns ...func(*sqs.Options)) (*sqs.ChangeMessageVisibilityOutput, error) {
|
||||
return resilience.Do(ctx, r.executor, func(ctx context.Context) (*sqs.ChangeMessageVisibilityOutput, error) {
|
||||
return r.next.ChangeMessageVisibility(ctx, params, optFns...)
|
||||
})
|
||||
}
|
||||
|
||||
func (r *resilientAPI) GetQueueAttributes(ctx context.Context, params *sqs.GetQueueAttributesInput, optFns ...func(*sqs.Options)) (*sqs.GetQueueAttributesOutput, error) {
|
||||
return resilience.Do(ctx, r.executor, func(ctx context.Context) (*sqs.GetQueueAttributesOutput, error) {
|
||||
return r.next.GetQueueAttributes(ctx, params, optFns...)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user