diff --git a/src/Transports/AWS/Wolverine.AmazonSqs.Tests/Internal/AmazonSqsQueueTests.cs b/src/Transports/AWS/Wolverine.AmazonSqs.Tests/Internal/AmazonSqsQueueTests.cs
index 84e2ecad6..0198daa9e 100644
--- a/src/Transports/AWS/Wolverine.AmazonSqs.Tests/Internal/AmazonSqsQueueTests.cs
+++ b/src/Transports/AWS/Wolverine.AmazonSqs.Tests/Internal/AmazonSqsQueueTests.cs
@@ -66,7 +66,8 @@ public void configure_request()
{
MaxNumberOfMessages = 8,
VisibilityTimeout = 3,
- WaitTimeSeconds = 11
+ WaitTimeSeconds = 11,
+ MessageAttributeNames = ["All"],
};
var request = new ReceiveMessageRequest();
@@ -76,6 +77,39 @@ public void configure_request()
request.VisibilityTimeout.ShouldBe(endpoint.VisibilityTimeout);
request.MaxNumberOfMessages.ShouldBe(endpoint.MaxNumberOfMessages);
request.WaitTimeSeconds.ShouldBe(endpoint.WaitTimeSeconds);
+ request.MessageAttributeNames.ShouldBe(endpoint.MessageAttributeNames);
+ }
+
+ [Fact]
+ public void default_message_attribute_names_is_null_on_endpoint()
+ {
+ new AmazonSqsQueue("foo", new AmazonSqsTransport())
+ .MessageAttributeNames.ShouldBeNull();
+ }
+
+ [Fact]
+ public void configure_request_does_not_set_message_attribute_names_when_null()
+ {
+ var endpoint = new AmazonSqsQueue("foo", new AmazonSqsTransport());
+ var request = new ReceiveMessageRequest();
+
+ endpoint.ConfigureRequest(request);
+
+ request.MessageAttributeNames.ShouldBeNull();
+ }
+
+ [Fact]
+ public void configure_request_does_not_set_when_empty_list()
+ {
+ var endpoint = new AmazonSqsQueue("foo", new AmazonSqsTransport())
+ {
+ MessageAttributeNames = []
+ };
+ var request = new ReceiveMessageRequest();
+
+ endpoint.ConfigureRequest(request);
+
+ request.MessageAttributeNames.ShouldBeNull();
}
}
diff --git a/src/Transports/AWS/Wolverine.AmazonSqs/Internal/AmazonSqsQueue.cs b/src/Transports/AWS/Wolverine.AmazonSqs/Internal/AmazonSqsQueue.cs
index 648d249f1..3a051b5d4 100644
--- a/src/Transports/AWS/Wolverine.AmazonSqs/Internal/AmazonSqsQueue.cs
+++ b/src/Transports/AWS/Wolverine.AmazonSqs/Internal/AmazonSqsQueue.cs
@@ -90,6 +90,13 @@ public int VisibilityTimeout
///
public string? DeadLetterQueueName { get; set; } = AmazonSqsTransport.DeadLetterQueueName;
+ ///
+ /// Optional list of message attribute names to request in ReceiveMessage.
+ /// Use "All" to retrieve all message attributes. If null or empty, nothing is requested.
+ /// (Attention: this is different from .)
+ ///
+ public List? MessageAttributeNames { get; set; }
+
public async ValueTask CheckAsync()
{
var response = await _parent.Client!.GetQueueUrlAsync(QueueName);
@@ -299,6 +306,11 @@ internal void ConfigureRequest(ReceiveMessageRequest request)
request.WaitTimeSeconds = WaitTimeSeconds;
request.MaxNumberOfMessages = MaxNumberOfMessages;
request.VisibilityTimeout = VisibilityTimeout;
+
+ if (MessageAttributeNames is { Count: > 0 })
+ {
+ request.MessageAttributeNames = MessageAttributeNames;
+ }
}
public async Task TeardownAsync(IAmazonSQS client, CancellationToken token)