- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有两个 AWS lambda 函数通过 SQS 队列连接在一起。它们已经正常工作了一段时间,但最近有效负载的大小增加了,现在已经突破了 256Kb 的限制。
阅读后Question 43738341喜欢使用 AmazonSQSExtendedClient。我查看了github处的代码并使我的第一个 lambda 函数正确发送消息(小有效负载通过 SQS,较大有效负载写入 S3)。
我正在努力解决的是接收消息:我的第二个 lambda 的入口点如下所示:
public class SqsHandler implements RequestHandler<SQSEvent, Void> {
public Void handleRequest(SQSEvent event, Context context) {
SQSEvent.SQSMessage record = event.getRecords().get(0);
System.out.println("0. record " + record.toString());
System.out.println("1. eventSource " + record.getEventSource());
System.out.println("2. eventSourceARN " + record.getEventSourceArn());
System.out.println("3. MessageId" + record.getMessageId());
System.out.println("4. ReceiptHandle " + record.getReceiptHandle());
System.out.println("5. Body " + record.getBody());
}
}
当我的入口点被调用时,我已经收到了我的 SQS 事件。我不(也不应该?)知道它来自哪个队列。
GitHub 上的代码示例(几乎逐行复制到所有其他站点上)发送者和接收者都是相同的 lambda。因此,它能够创建 ReceiveMessageRequest 对象,因为它知道队列 URL。
在真实的系统中,发送者和接收者永远不会相同。我什至可以通过多个队列接收来自多个 Lambda 的数据
我不明白的是接收 Lambda 应该如何编写。 AWS Website上的示例代码说:
final ReceiveMessageRequest receiveMessageRequest =
new ReceiveMessageRequest(myQueueUrl);
List<Message> messages = sqsExtended
.receiveMessage(receiveMessageRequest).getMessages();
但这需要我知道队列的 url。它也不与需要使用的 SQSEvent 相关联。
最佳答案
有效负载超过 256KB 的 SQSEvent 记录的消息正文应包含一个表示 S3 指针的 JSON 字符串,该指针由存储实际有效负载的 s3BucketName 和 s3Key 属性组成。请参阅MessageS3Pointer AmazonSQSExtendedClient 的类定义和 storeMessageInS3 方法类供引用。有了这些信息,您应该能够直接从 S3 获取消息内容,而无需依赖 Lambda 事件处理程序中的 SQS 扩展客户端库。
关于java - 如何使用 AmazonSQSExtendedClient 从 SQSEvent 接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57042235/
我有两个 AWS lambda 函数通过 SQS 队列连接在一起。它们已经正常工作了一段时间,但最近有效负载的大小增加了,现在已经突破了 256Kb 的限制。 阅读后Question 43738341
我有一个用 Java 编写的带有此处理程序签名的 Lambda: public class MessageListenerHandler implements RequestHandler> { p
一点背景, 我正在使用 Serverless 和 .Net 创建一个带有 SQS 触发器的 lambda。 事件触发器设置为批处理大小为 10k,等待时间(批处理窗口即 MaximumBatching
我正在编写一个 lambda 函数,该函数从 SQS 事件读取消息并将消息存储在 S3 中,但我发现默认的“aws-lambda-java-events 1.3.0”中不存在 Java 类 SQSEv
我是一名优秀的程序员,十分优秀!