我有几个通过 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; 
    } 
} 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!