从SNS + SQS读取不同类型的事件

问题描述

我正在创建一个系统,在该系统中,我需要从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流技术。