我有几个通过 SNS 一起工作的 lambda。一个 lambda 接收请求并将数据发送到 SNS。另一个 lambda 订阅了 SNS。在 JavaScript 中很容易做到,因为传入的消息只是一个 JS 对象。现在我将 lambda 重写为 Java。我正在寻找要在处理程序中使用的类型。
这是 lambda 的样子。 SNSMessage 是类型的占位符。
public class ArchiveRequestHandler implements RequestHandler<SNSMessage?, Void> {
@Override public Void handleRequest(SNSMessage? input, Context context) {
// do something with the message
return null;
}
}
这是示例消息的样子:
{
"Records": [
{
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:aws:sns:EXAMPLE",
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "1234567-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": "arn:aws:sns:EXAMPLE",
"Subject": "TestInvoke"
}
}
]
}
现在我确信我可以创建自己的类型来解析它,但我希望有一种更标准的方式来做这件事。但是,我在 lambda 或 SNS SDK 依赖项中没有找到任何看起来像这个对象的东西。
请您参考如下方法:
感谢@dnault 和@notionquest 的评论,我发现这个对象是aws-lambda-java-events
的一部分。图书馆。我添加了依赖项:
compile 'com.amazonaws:aws-lambda-java-events:1.3.0'
现在我可以这样做:
public class ArchiveRequestHandler implements RequestHandler<SNSEvent, Void> {
@Override public Void handleRequest(SNSEvent input, Context context) {
// do something with the message
return null;
}
}