AWS SQSサービスを検討しています。 java sdkを使用してキューからメッセージを削除しようとすると、私はいくつかの問題に直面しています。Java SDKを使用したAWS SQSメッセージの削除
キューはSQSで作成され、3つのメッセージがあります。このキューは、大規模なメッセージを処理するためのAWS S3ストレージによってバックアップされています。
ここでは、複数回ポーリングしてメッセージを受信する方法を示します。メッセージをポーリングする
private static void receiveMessage(String queueUrl) {
// Receive messages
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl).withMaxNumberOfMessages(10)
.withWaitTimeSeconds(10).withVisibilityTimeout(100);
List<Message> messages = sqsExtended.receiveMessage(receiveMessageRequest).getMessages();
System.out.println("Number of mesasges : First poll : " + messages.size());
while (messages.size() > 0) {
messages = pollForMessages(messages, receiveMessageRequest, queueUrl);
System.out.println("Messages in next poll : " + messages.size());
}
if (messages.size() > 0) {
System.out.println("displaying last set of messages ");
for (int i = 0; i < messages.size(); i++) {
System.out.println("\nMessage received:");
System.out.println(" ID: " + messages.get(i).getMessageId());
System.out.println(" Receipt handle: " + messages.get(i).getReceiptHandle());
System.out.println("approx. num of messages : "
+ messages.get(i).getAttributes().get("ApproximateNumberOfMessages"));
System.out.println(" Message body (first sentence): " + messages.get(i).getBody().substring(0, 56));
// deleteMessage(messages.get(i), queueUrl);
}
deleteMessage(messages, queueUrl);
}
}
方法:
SQSメッセージを受信
private static List<Message> pollForMessages(List<Message> messages, ReceiveMessageRequest receiveMessageRequest,
String queueUrl) {
// display the received messages
for (int i = 0; i < messages.size(); i++) {
System.out.println("\nMessage received:");
System.out.println(" ID: " + messages.get(i).getMessageId());
System.out.println(" Receipt handle: " + messages.get(i).getReceiptHandle());
System.out.println(
"approx. num of messages : " + messages.get(i).getAttributes().get("ApproximateNumberOfMessages"));
System.out.println(" Message body (first sentence): " + messages.get(i).getBody().substring(0, 56));
// deleteMessage(messages.get(i), queueUrl);
}
deleteMessage(messages, queueUrl);
messages = sqsExtended.receiveMessage(receiveMessageRequest).getMessages();
return messages;
}
削除SQSメッセージ:
private static void deleteMessage(List<Message> messages, String queueUrl) {
// Delete the messages
for (Message message : messages) {
DeleteMessageRequest dmr = new DeleteMessageRequest();
dmr.withQueueUrl(queueUrl).withReceiptHandle(message.getReceiptHandle());
sqsExtended.deleteMessage(dmr);
System.out.println("Deleted the message with Id : " + message.getMessageId());
}
}
deleteMessage
メソッドの呼び出しが行われると、プログラムは以下の例外発生した:私はまさに例外の理由を把握することができませんでし
Apr 21, 2017 5:32:56 PM com.amazon.sqs.javamessaging.ExtendedClientConfiguration setLargePayloadSupportEnabled
INFO: Large-payload support enabled.
Number of mesasges : First poll : 1
Message received:
ID: f4f00368-b308-4763-84cf-8e33e1931fed
Receipt handle: AQEBwhLDOIMobJazre1KoSYoMlHajHD1A6j7gZClk1h4FYWAmFd0p6wIFU69rSuhhVdQef+qF6E6RQIQLWaLqS2r0/Kfw3rUrmppIkTcowsVRW36uJ3p4UqnNjZu0cxncNMw78kHfHRej0gwH0gvvMedZXvEimoXUYZq1+K3Gz35etKsUR9EPKuroYaHZ6Aghdu0Osb4cQu+iLxlBrANhFl63762V7EDEEjSeULyQm52wS/OQq7JiktRWFgyGkp/41tHlN3ARB0v2MM3wXaoZMBt8bAyGURXb+Nx+5e3UoSI5J8pQccSwFnk70N1lV7XUswBTk4549uJ0FPlEMoFef6cxeFi1nxEXkfwIJQ9e93wMJUGLnhsx7rNWhS9w6UCVv4yZoARBsMrQbg287LkACLLnw==
approx. num of messages : null
Message body (first sentence): {
"Type" : "Notification",
"MessageId" : "fc1b19bc-6
Exception in thread "main" java.lang.AbstractMethodError: com.amazon.sqs.javamessaging.AmazonSQSExtendedClient.deleteMessage(Lcom/amazonaws/services/sqs/model/DeleteMessageRequest;)Lcom/amazonaws/services/sqs/model/DeleteMessageResult;
at org.nfjs.aws.sqs.SQSExtendedClient.deleteMessage(SQSExtendedClient.java:149)
at org.nfjs.aws.sqs.SQSExtendedClient.pollForMessages(SQSExtendedClient.java:139)
at org.nfjs.aws.sqs.SQSExtendedClient.receiveMessage(SQSExtendedClient.java:108)
at org.nfjs.aws.sqs.SQSExtendedClient.main(SQSExtendedClient.java:63)
:
java.lang.AbstractMethodError: com.amazon.sqs.javamessaging.AmazonSQSExtendedClient.deleteMessage(Lcom/
ログメッセージを。 上記のコードスニペットでjava sdkを使用しているものがありませんか?
ご意見ありがとうございます。
Henrikにご提案いただきありがとうございます。問題は、Mavenリポジトリからjarファイルを取得したことが原因です。 – Vignesh