メッセージを送信する前に、次のコードを使用してSQSに属性を持つメッセージを投稿した後(およびSQSコンソールですべてが正しく投稿されているかどうかを確認する)...
messageRequest.addMessageAttributesEntry(
"attributeTest",
new MessageAttributeValue()
.withDataType("String")
.withStringValue("attributeTest 123"));
メッセージ内のメッセージ属性を取得できません。結果として、私が見るのは「0属性」だけです。 Amazon 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 SDKv1.8をJava 1.7 with Play Framework 2.2.3で使用しています。最初はSQSバージョンである可能性があると思いましたが、1.8.7にアップグレードしようとしましたが役に立ちませんでした。
見つかった公式ドキュメント ここ は、属性を読み取るためのソースコードをまったく提供していません。 github検索も、スタックオーバーフローもありません。私は何の成功もなく数時間試みてきました。
助けてくれてありがとう!
リクエストに必要なメッセージ属性を指定する必要があります(または「すべて」を使用してすべてのメッセージ属性を取得します)。したがって、あなたの場合はどちらかを使用できます
_List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("attributeTest")).getMessages();
_
または
_List<Message> messages = sqs.receiveMessage(receiveMessageRequest.withMessageAttributeNames("All")).getMessages();
_
メッセージと一緒に標準属性(ApproximateFirstReceiveTimestamp、ApproximateReceiveCount、SenderId、およびSentTimestamp)が必要な場合は、withAttributeNames("All")
を使用します。詳細については、Javadocで ReceiveMessageRequest を参照してください。