Skip to content

Commit e72cae8

Browse files
committed
feat: add ability to set message visibility
1 parent f58e66b commit e72cae8

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

aws/sqs/sqs.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,19 @@ func (s *SQS) Delete(queueURL, receiptHandle string) error {
211211
return err
212212
}
213213

214+
// SetMessageVisibility sets the visibility timeout for a message.
215+
func (s *SQS) SetMessageVisibility(queueURL, receiptHandle string, visibilityTimeout int32) error {
216+
params := sqs.ChangeMessageVisibilityInput{
217+
QueueUrl: aws.String(queueURL),
218+
ReceiptHandle: aws.String(receiptHandle),
219+
VisibilityTimeout: visibilityTimeout,
220+
}
221+
222+
_, err := s.client.ChangeMessageVisibility(context.TODO(), &params)
223+
224+
return err
225+
}
226+
214227
// Send sends the message body to the SQS queue referred to by queueURL.
215228
func (s *SQS) Send(queueURL string, body string) error {
216229
params := sqs.SendMessageInput{

aws/sqs/sqs_integration_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,3 +851,29 @@ func TestDeleteQueue(t *testing.T) {
851851
assert.Nil(t, err)
852852
assert.Panics(t, func() { awsCmdDeleteQueue(newQueueUrl) })
853853
}
854+
855+
func TestMessageVisibility(t *testing.T) {
856+
// ARRANGE
857+
setup()
858+
defer teardown()
859+
860+
client, err := New()
861+
require.Nil(t, err, "error with test setup")
862+
863+
require.Nil(t, client.Send(awsCmdQueueURL(), testMessage), "error with test setup")
864+
865+
// receive, with visibility timeout of 5min
866+
receivedMessage, err := client.Receive(awsCmdQueueURL(), 5*60)
867+
868+
require.Nil(t, err, "error with test setup")
869+
require.Equal(t, awsCmdQueueCount(), 0)
870+
871+
// ACTION
872+
// set visibility timeout to 10 s
873+
client.SetMessageVisibility(awsCmdQueueURL(), receivedMessage.ReceiptHandle, 10)
874+
875+
// ASSERT
876+
assert.Equal(t, awsCmdQueueCount(), 0) // not visible yet
877+
time.Sleep(11 * time.Second)
878+
assert.Equal(t, awsCmdQueueCount(), 1) // message visible now
879+
}

0 commit comments

Comments
 (0)