问题描述
我正在创建一个系统,在该系统中,我需要从SNS + SQS组合中读取几种不同类型的事件,即有一个现有的系统将不同类型的事件放入SNS主题中,并且有一个SQS订阅了此SNS话题。之后,SQS将触发Lambda(L1)。
下面是两个示例SQS事件:
{
"event_type" : "started","parent_id" : "a1","timestamp" : "t1"
}
{
"event_type" : "completed","child_id" : "a2","timestamp" : "t2"
}
在获取这些事件后,L1会将这些事件按以下方式存储在Nosql存储区(例如DynamoDB)中(按parent_id分组并按时间戳排序,即a1->列表):
{
"a1" : [
{
"event_type" : "started","timestamp" : "t1"
},{
"event_type" : "completed","timestamp" : "t2"
}
]
}
Q:您能为我在这些事件中在L1内部进行的低层数据建模提供帮助吗?我应该自己尝试建模还是只使用Object Mapper(Gson或Jackson)来完成工作?
此外,还有另一个Lambda(L2),该Lambda(L2)从DB中读取与给定parent_id对应的事件,进行服务调用以获取所有事件的其他元数据,使用这些其他字段准备另一个事件列表,然后返回到来电者。
例如
{
"event_type" : "started","timestamp" : "t1","Metadata" : {
"m1" : "abc","m2" : "xyz"
}
},{
"event_type" : "completed","timestamp" : "t2","Metadata" : {
"m3" : "lmn"
}
}
请提供有关设计此系统的建议。
任何建议将不胜感激。
谢谢
解决方法
对于第一个问题,我的建议是,您不需要映射到任何Pojo,只需映射到具有键/值的映射即可。然后基于event_type,您可以执行自己的业务逻辑,例如存储到DynamoDB。
然后,您可以为另一个lambda(Lambda2)启用DynamoDB流技术。