Лямбда с SNS -> SQS AWS - PullRequest
       7

Лямбда с SNS -> SQS AWS

0 голосов
/ 22 февраля 2019

У меня есть AWS лямбда, которая будет запускаться из SNS -> SQS.Это означает, что у меня есть SNS, а затем SQS является абонентом.Затем у меня есть лямбда, запускаемая SQS.

Я построил простую лямбду, как показано ниже

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()
        }
    }

И у msg.getBody будет json, как показано ниже

{
   "Type":"Notification",
   "MessageId":"d3056919-1db0-5bcb-b5ce-3df0eb234dd9",
   "TopicArn":"arn:aws:sns:us-east-2:enhance-canonical-topic",
   "Subject":"nghia do subject",
   "Message":"{\n\"groupRuleSourceLocation\" : \"groupRuleSourceLocation\",\n\"canonicalSourceLocation\": \"canonicalSourceLocation\"\n}",
   "Timestamp":"2019-02-22T13:08:35.147Z",
   "SignatureVersion":"1",
   "SigningCertURL":"https://sns.us-east-2.amazonaws.com/.pem",
   "UnsubscribeURL":"https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:057351434671:enhance-canonical-topic:",
   "MessageAttributes":{}
}

Я хотел бы посмотреть, есть ли у AWS все-таки возможность сопоставить это сообщение тела с уже определенным Pojo?или нам нужно использовать json или mapper для отображения на определяемый нами объект?

Спасибо,

1 Ответ

0 голосов
/ 22 февраля 2019

Вам придется составить карту самостоятельно или использовать картографы (как вы упомянули), такие как 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, удалив один слой сложности в вашей архитектуре.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...