From 42f5c2de159de2ffc8b69ed42908d2acbd529a83 Mon Sep 17 00:00:00 2001 From: Quest Henkart Date: Fri, 19 May 2023 16:45:53 +0800 Subject: [PATCH] Allow for queue specific visibility time out setting --- app/common.go | 5 +++-- app/conf/config.go | 7 ++++++- app/conf/config_test.go | 7 ++++++- app/conf/mock-data/mock-config.yaml | 1 + 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/common.go b/app/common.go index da3d7d5b..9de0b89a 100644 --- a/app/common.go +++ b/app/common.go @@ -20,12 +20,13 @@ type EnvQueue struct { ReceiveMessageWaitTimeSeconds int RedrivePolicy string MaximumMessageSize int + VisibilityTimeout int } type EnvQueueAttributes struct { VisibilityTimeout int ReceiveMessageWaitTimeSeconds int - MaximumMessageSize int + MaximumMessageSize int } type Environment struct { @@ -41,7 +42,7 @@ type Environment struct { Topics []EnvTopic Queues []EnvQueue QueueAttributeDefaults EnvQueueAttributes - RandomLatency RandomLatency + RandomLatency RandomLatency } var CurrentEnvironment Environment diff --git a/app/conf/config.go b/app/conf/config.go index b9b0969b..df8b3a85 100644 --- a/app/conf/config.go +++ b/app/conf/config.go @@ -104,13 +104,18 @@ func LoadYamlConfig(filename string, env string) []string { if queue.ReceiveMessageWaitTimeSeconds == 0 { queue.ReceiveMessageWaitTimeSeconds = app.CurrentEnvironment.QueueAttributeDefaults.ReceiveMessageWaitTimeSeconds } + if queue.MaximumMessageSize == 0 { queue.MaximumMessageSize = app.CurrentEnvironment.QueueAttributeDefaults.MaximumMessageSize } + if queue.VisibilityTimeout == 0 { + queue.VisibilityTimeout = app.CurrentEnvironment.QueueAttributeDefaults.VisibilityTimeout + } + app.SyncQueues.Queues[queue.Name] = &app.Queue{ Name: queue.Name, - TimeoutSecs: app.CurrentEnvironment.QueueAttributeDefaults.VisibilityTimeout, + TimeoutSecs: queue.VisibilityTimeout, Arn: queueArn, URL: queueUrl, ReceiveWaitTimeSecs: queue.ReceiveMessageWaitTimeSeconds, diff --git a/app/conf/config_test.go b/app/conf/config_test.go index bca57948..2f6d8649 100644 --- a/app/conf/config_test.go +++ b/app/conf/config_test.go @@ -99,7 +99,12 @@ func TestConfig_QueueAttributes(t *testing.T) { } maximumMessageSize = app.SyncQueues.Queues["local-queue2"].MaximumMessageSize if maximumMessageSize != 128 { - t.Errorf("Expected local-queue1 Queue to be configured with MaximumMessageSize: 128 but got %d\n", maximumMessageSize) + t.Errorf("Expected local-queue2 Queue to be configured with MaximumMessageSize: 128 but got %d\n", maximumMessageSize) + } + + timeoutSecs = app.SyncQueues.Queues["local-queue2"].TimeoutSecs + if timeoutSecs != 150 { + t.Errorf("Expected local-queue2 Queue to be configured with VisibilityTimeout: 150 but got %d\n", timeoutSecs) } } diff --git a/app/conf/mock-data/mock-config.yaml b/app/conf/mock-data/mock-config.yaml index ab5da71e..f0068ffa 100644 --- a/app/conf/mock-data/mock-config.yaml +++ b/app/conf/mock-data/mock-config.yaml @@ -15,6 +15,7 @@ Local: # Environment name that can be passed on the - Name: local-queue2 # Queue name ReceiveMessageWaitTimeSeconds: 20 # Queue receive message max wait time MaximumMessageSize: 128 # Queue maximum message size (bytes) + VisibilityTimeout: 150 # Queue visibility timeout - Name: local-queue3 # Queue name RedrivePolicy: '{"maxReceiveCount": 100, "deadLetterTargetArn":"arn:aws:sqs:us-east-1:000000000000:local-queue3-dlq"}' - Name: local-queue3-dlq # Queue name