gpt4 book ai didi

java - Lambda 与 SNS -> SQS AWS

转载 作者:行者123 更新时间:2023-11-30 10:06:07 25 4
gpt4 key购买 nike

我有一个 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()
}
}

并且 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 映射到我们定义的对象?

谢谢,

最佳答案

您必须自己映射或使用映射器(如您提到的),例如 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 主题,从而消除架构中的一层复杂性。

希望这对您有所帮助!

关于java - Lambda 与 SNS -> SQS AWS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54830575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com