Amazon SQS Java SDK - не может получать атрибуты сообщений

После отправки сообщения с атрибутом SQS со следующим кодом перед его отправкой (и проверкой в ​​консоли SQS, чтобы увидеть, все ли опубликовано правильно)...

messageRequest.addMessageAttributesEntry(
        "attributeTest", 
        new MessageAttributeValue()
            .withDataType("String")
            .withStringValue("attributeTest 123"));

Я не могу получить какие-либо атрибуты сообщения в сообщении. Все, что я вижу, в результате - "0 атрибутов". Повторное ознакомление с сообщением в консоли Амазонки SQS, сообщение - и атрибут - все еще есть.

// Message was previously checked in SQS console and contains 
// an attribute named "attributeTest"

AmazonSQS sqs = ...
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
for (Message : messages) 
{
    Map<String, MessageAttributeValue> attributes = message.getMessageAttributes();
    System.out.println("" + attributes.size() + " attributes.");
}

Я использую Amazon SQS SDK v1.8 в Java 1.7 с Play Framework 2.2.3. Сначала я подумал, что это может быть версия SQS, но попытался перейти на 1.8.7 без возможности.

В официальной документации, найденной здесь, не содержится никакого исходного кода для чтения атрибутов вообще. Не выполняется поиск в github, переполнение стека. Я пробовал несколько часов без каких-либо успехов.

Спасибо за любую помощь!

Ответы

Ответ 1

Вы должны указать, какие атрибуты сообщений вы хотите в своем запросе (или использовать "Все", чтобы получить все атрибуты сообщений). Поэтому в вашем случае вы можете использовать

List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("attributeTest")).getMessages();

или

List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();

Если вам нужны стандартные атрибуты (ApproximateFirstReceiveTimestamp, ApproximateReceiveCount, SenderId и SentTimestamp) вместе с вашими сообщениями, используйте withAttributeNames("All"). Более подробную информацию вы можете найти в Javadocs для ReceiveMessageRequest.