java - 如何在用 Java 编写的 AWS Lambda 中处理 SNS 消息?

标签 java amazon-web-services aws-lambda

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

关于java - 如何在用 Java 编写的 AWS Lambda 中处理 SNS 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42963301/

相关文章:

java - Collectors.toSet() 是否总是返回 HashSet ?什么是契约(Contract)?

python - 如何使用 Python 中的线程来并行化 AWS S3 API 调用?

amazon-web-services - ec2错误启动实例容量不足

amazon-web-services - AWS 负载均衡器 502

python - 带有 cors 的 flask 的 zappa 自定义授权器

amazon-web-services - 如何将 api 网关(带有 api key )添加到现有的 lambda cloudformation 模板?

java - 如何按类型从列表中获取对象

java - ideone 上线程 "main"java.util.NoSuchElementException 中的异常

java - 在derby数据库中存储数组

amazon-web-services - AWS Lambda : How do I connect to a service that uses IP whitelisting from AWS Lambda?