いくつかの例でこれを理解してみましょう。10 個のメッセージを作成して送信します
// Send a message
for (int i = 0; i < 10; i++) {
System.out.println("Sending a message to MyQueue.\n");
Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
// extra code
String sdate;
Format formatter;
Date date = new Date();
// 2012-12-01
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
sdate = formatter.format(date);
System.out.println(sdate);
messageAttributes.put("Datestamp"+i, new MessageAttributeValue().withDataType("String").withStringValue(sdate));
Map<String, MessageAttributeValue> messageAttributes1 = new HashMap<>();
messageAttributes1.put("attributeName", new MessageAttributeValue().withDataType("String").withStringValue(sdate));
SendMessageRequest request = new SendMessageRequest();
request.withMessageBody("A test message body."+sdate);
request.withQueueUrl(myQueueUrl);
request.withMessageAttributes(messageAttributes);
sqs.sendMessage(request);
}
datetimestamp1 から datetimestamp10 までの 10 個のメッセージがあっても
、属性によるフィルタリングは機能しません
いくつかの myTag 属性でフィルターを試してみましょう
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);
//ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest(queueUrl);
receiveMessageRequest.withMaxNumberOfMessages(10);
receiveMessageRequest.withMessageAttributeNames("myTag");
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
10 個のメッセージが返され、myTag 値は null です
message.getMessageAttributes().get("日付スタンプ") は null です message.getMessageAttributes().get("myTag") は null です
したがって、そのキーが見つからないかのようにメッセージ属性でフィルタリングすることはできません。メッセージ属性がないか、すべてのメッセージ属性が同じです。
長い答えはNOOOOOです