Java 带有SNS->;SQS AWS

Java 带有SNS->;SQS AWS,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,Im有一个aws lambda,它将从SNS->SQS触发。这意味着,我有一个SNS,然后SQS是一个亚转录者。然后我有一个由SQS触发的lambda 我构建了一个简单的Lambda,如下所示 public class EnhancedCanonicalLambdaHandler implements RequestHandler<SQSEvent, String> { static final Logger log = LogManager.getLogger(Enhanc

Im有一个aws lambda,它将从SNS->SQS触发。这意味着,我有一个SNS,然后SQS是一个亚转录者。然后我有一个由SQS触发的lambda

我构建了一个简单的Lambda,如下所示

public class EnhancedCanonicalLambdaHandler implements RequestHandler<SQSEvent, String> {
    static final Logger log = LogManager.getLogger(EnhancedCanonicalLambdaHandler.class);
    static final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public String handleRequest(SQSEvent sqsEvent, Context context) {
        log.info("There are {} records to be processing ...", sqsEvent.getRecords().size());

        for(SQSEvent.SQSMessage msg : sqsEvent.getRecords()) {
// I want to map msg.getBody()
        }
    }
我想看看AWS是否必须将此正文消息映射到已定义的Pojo?或者我们需要使用json或mapper来映射到我们定义的对象


谢谢,

您必须自己绘制地图,或者使用诸如Gson或Jackson之类的绘图工具(如您所述)

下面是一个使用Gson实现此目标的示例:

Gson gson = new Gson();
String snsOrSqsMessageBody = "{\r\n   \"Type\":\"Notification\",\r\n   \"MessageId\":\"d3056919-1db0-5bcb-b5ce-3df0eb234dd9\",\r\n   \"TopicArn\":\"arn:aws:sns:us-east-2:enhance-canonical-topic\",\r\n   \"Subject\":\"nghia do subject\",\r\n   \"Message\":\"{\\n\\\"groupRuleSourceLocation\\\" : \\\"groupRuleSourceLocation\\\",\\n\\\"canonicalSourceLocation\\\": \\\"canonicalSourceLocation\\\"\\n}\",\r\n   \"Timestamp\":\"2019-02-22T13:08:35.147Z\",\r\n   \"SignatureVersion\":\"1\",\r\n   \"SigningCertURL\":\"https:\/\/sns.us-east-2.amazonaws.com\/.pem\",\r\n   \"UnsubscribeURL\":\"https:\/\/sns.us-east-2.amazonaws.com\/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:057351434671:enhance-canonical-topic:\",\r\n   \"MessageAttributes\":{}\r\n}";
MyCustomClass myCustomObject = gson.fromJson(snsOrSqsMessageBody, MyCustomClass.class);
出于好奇:SQS在您的应用程序中扮演什么角色?您可以简单地将Lambda订阅到您的SNS主题,从而消除架构中的一层复杂性


希望这有帮助

谢谢你提供的信息。我们希望使用SNS->SQS的原因是我们可以灵活地使用信息。SQS是我们的订户之一。有了这个模式,我想看看我们是否可以在sqs的基础上扩展应用程序。谢谢分享你的想法!
Gson gson = new Gson();
String snsOrSqsMessageBody = "{\r\n   \"Type\":\"Notification\",\r\n   \"MessageId\":\"d3056919-1db0-5bcb-b5ce-3df0eb234dd9\",\r\n   \"TopicArn\":\"arn:aws:sns:us-east-2:enhance-canonical-topic\",\r\n   \"Subject\":\"nghia do subject\",\r\n   \"Message\":\"{\\n\\\"groupRuleSourceLocation\\\" : \\\"groupRuleSourceLocation\\\",\\n\\\"canonicalSourceLocation\\\": \\\"canonicalSourceLocation\\\"\\n}\",\r\n   \"Timestamp\":\"2019-02-22T13:08:35.147Z\",\r\n   \"SignatureVersion\":\"1\",\r\n   \"SigningCertURL\":\"https:\/\/sns.us-east-2.amazonaws.com\/.pem\",\r\n   \"UnsubscribeURL\":\"https:\/\/sns.us-east-2.amazonaws.com\/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:057351434671:enhance-canonical-topic:\",\r\n   \"MessageAttributes\":{}\r\n}";
MyCustomClass myCustomObject = gson.fromJson(snsOrSqsMessageBody, MyCustomClass.class);