- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在探索 AWS SQS 服务。当尝试使用 java sdk 从队列中删除消息时,我遇到了一些问题。
在 SQS 中创建了一个队列,它有三个消息。该队列由 AWS S3 存储支持,用于处理大型消息。
这里是通过多次轮询接收消息的方法。
接收 SQS 消息:
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);
}
}
轮询消息的方法:
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
方法时,程序遇到以下异常:
java.lang.AbstractMethodError: com.amazon.sqs.javamessaging.AmazonSQSExtendedClient.deleteMessage(Lcom/
日志消息:
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 sdk 的代码片段中的任何内容?
提前感谢您的任何建议。
最佳答案
我没有使用 Amazon SQS Extended Client Library for Java我自己,所以我无法真正判断细节,但看起来它与 AWS Java SDK 不同步。
参见 Exeption on AmazonSQSExtendedClient.deleteMessage对于一个(到目前为止 Unresolved )问题,以及 SQS Extended Client Lib not compatible with Core SDK 1.11.xx对于更一般的。
后者指向最终有用的 support aws-sdk-java 1.11.8拉取请求,尽管那个请求现在也已经过时了。
关于java - 使用 Java sdk 删除 AWS SQS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43542746/
我在 lambda 中有以下代码: entries = [ { "Id": str(index), "MessageAttribut
我正在构建一个无服务器应用程序,它在资源中定义了一个 SQS 队列,如下所示: resources: Resources: TheQueue: Type: "AWS:SQS:Q
我正在使用无服务器框架来使用来自 SQS 的消息。一些发送到队列的消息不会被消费。他们直接进入飞行中的 SQS 状态,然后从那里进入我的死信队列。当我查看我的消费者日志时,我可以看到它消费并成功处理了
我们的亚马逊 SQS 队列没有收到来自亚马逊 MWS 的 AnyOfferChanged 通知消息。 我们发送一个测试通知,当我们收到通知时,它会被发送到队列并可用。 我们已经设置了两个 AWS 账户
我想知道最后一条消息何时发布到 SQS 队列。 查看队列属性(通过 CLI 或其他方式),我看不到任何合适的内容 - 只能看到队列属性最后一次修改的时间。 如果有什么技巧可以找到这个(在不了解客户的情
我正在使用无服务器框架来使用来自 SQS 的消息。一些发送到队列的消息不会被消费。他们直接进入飞行中的 SQS 状态,然后从那里进入我的死信队列。当我查看我的消费者日志时,我可以看到它消费并成功处理了
我们的亚马逊 SQS 队列没有收到来自亚马逊 MWS 的 AnyOfferChanged 通知消息。 我们发送一个测试通知,当我们收到通知时,它会被发送到队列并可用。 我们已经设置了两个 AWS 账户
我正在使用 Amazon SQS 队列向外部系统发送通知。 如果使用 SQS 时 HTTP 请求失败 SendMessage ,我不知道消息是否已排队。我的默认策略是重试将消息发布到队列,但存在两次发
来自 SNS FAQ ,我知道 SNS 到 SQS 有重试策略,但是他们是否保证至少向 SQS 传递一条消息? 请给官方报价。 最佳答案 见 https://aws.amazon.com/sqs/fa
我是否可以使用 Amazon PHP SDK 根据消息 ID 从 SQS 队列中获取消息?我是否必须获取队列中的所有消息,然后在我的服务器上对其进行过滤? 我的服务器收到一个带有队列消息 ID 的 S
我意外删除了 Amazon SQS 中的队列。有没有办法检索/撤消删除? 最佳答案 不,队列(以及队列上的任何消息)将永远消失。 如果您使用相同名称重新创建队列,它将保留相同的 ARN 和 URL。希
我的大多数 Celery 任务的 ETA 都长于 Amazon SQS 定义的最大可见性超时。 celery documentation说: This causes problems with ETA
我正在实现 SQS fifo 队列。我必须使用 cloudformation 模板来实现。 当我放大推送时,我得到 错误API:sqs:CreateQueue 对资源 https://sqs.us-e
我有一个代码,我需要将消息发送到现有的 sqs 队列。 我在 aws-cdk 中有这段代码。但这是行不通的。没有添加访问权限。 const sqsQ = sqs.Queue.fromQueueArn(
我很想了解 GCP 的 PubSub 的实现。尽管 Pubsub 似乎指向遵循发布-订阅设计模式,但它似乎比 AWS SNS(使用发布-订阅模型)更接近 AWS 的 SQS(队列)。为什么认为这是,G
序言:我正在尝试为我认为是一个非常常见的用例提出一个建议,我想使用 Amazon 的 SWF 和 SQS 来实现我的目标。可能还有其他服务可以更好地匹配我正在尝试做的事情,因此,如果您有任何建议,请随
AWS SQS 是否可以通过某种方式调用我的 REST API?基本上,一旦消息被推送到 AWS SQS,我就想听到它并执行所需的操作。我可以安排一个每秒可以提取消息的监听器,但这不是一个优化解决方案
我已配置 SQS 监听器来使用消息列表中的消息,但一次只收到一条消息,并收到错误,因为无法将 model.StudentData 转换为 java.util.ArrayList 的实例 我的代码是:-
使用 Amazon Simple Queue Service 发送消息需要多长时间? 另外,我想知道在 Amazon SQS 中一分钟内会发送多少条消息? 最佳答案 截至 2007 年,at leas
我正在使用 Amazon-SQS,我尝试从队列中检索大约数量的属性,但响应为空 我正在使用 C# 以下是代码: GetQueueAttributesRequest attReq = new GetQu
我是一名优秀的程序员,十分优秀!