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.