DynamoDB 主表和 child 表作为 Amazon SNS 中的发布者/订阅者
DynamoDB master and child tables as Publisher/ Subscriber in Amazon SNS
我有两个 DynamoDB table,其中一个 table 有发布者记录(主 table),另一个 table 有订阅者记录(child table).
我想构建一个系统,发布者端的更改会导致所有订阅者都收到通知。我查看了AWS SNS的文档,订阅者可以是Lambda或SQS等
有什么方法可以让我的 child 记录成为 DynamoDB 中的订阅者?
因此,每当发布者记录发生变化时,所有 child 记录都应立即得到通知。
扩展 luk2302 完全有效的评论:
这里有一些误解:
- DynamoDB 和 SNS 之间没有直接集成,因此订阅 table 中的单个项目不起作用
- 您无法在 SNS 之外管理 SNS 的订阅者,他们需要在 SNS 内订阅
实现 Publisher/Subscriber 模式的最简单方法确实是 SNS,但您不能只写入 DynamoDB table 并集成它。
如果你想要一个基于 DynamoDB 的解决方案,我可能会这样开始。
会有两个table:
- Publishers 启用了 PK 和 SK 的复合主键以及 DynamoDB 流
- 订阅者 具有 PK 和 SK 的复合主键
还有一个名为 StreamProcessor 的 Lambda 函数,它以 Publisher table 的流作为输入。
出版商看起来像这样
PK
SK
Message
P#<id>
M#<id0>
Some Message
P#<id>
M#<id1>
Some Message
P#<id>
M#<id2>
Some Message
P#<id>
M#<id3>
Some Message
P#<id>
其中 <id>
是发布者的 ID,M#<id0>
是消息 ID。
订阅者 看起来像这样:
PK
SK
Contact
P#<id>
S#<id0>
test1@mail.com
P#<id>
S#<id1>
test2@mail.com
P#<id>
S#<id2>
test3@mail.com
P#<id>
S#<id3>
test4@mail.com
P#<id>
其中 <id>
是发布者的 ID,S#<id0>
是订阅 ID。
现在只要发布者 table 发生变化(例如,新消息被添加到发布者),StreamProcessor
Lambda 就会被调用。
StreamProcessor
然后可以做这样的事情:
- 从更新记录中提取发布者 ID
- 使用
PK=P#<id>
查询订阅者 table 以获取订阅者列表
- 对于每个结果:
- 确定联系方式
- 向订阅者发送消息
我有两个 DynamoDB table,其中一个 table 有发布者记录(主 table),另一个 table 有订阅者记录(child table).
我想构建一个系统,发布者端的更改会导致所有订阅者都收到通知。我查看了AWS SNS的文档,订阅者可以是Lambda或SQS等
有什么方法可以让我的 child 记录成为 DynamoDB 中的订阅者?
因此,每当发布者记录发生变化时,所有 child 记录都应立即得到通知。
扩展 luk2302 完全有效的评论:
这里有一些误解:
- DynamoDB 和 SNS 之间没有直接集成,因此订阅 table 中的单个项目不起作用
- 您无法在 SNS 之外管理 SNS 的订阅者,他们需要在 SNS 内订阅
实现 Publisher/Subscriber 模式的最简单方法确实是 SNS,但您不能只写入 DynamoDB table 并集成它。 如果你想要一个基于 DynamoDB 的解决方案,我可能会这样开始。
会有两个table:
- Publishers 启用了 PK 和 SK 的复合主键以及 DynamoDB 流
- 订阅者 具有 PK 和 SK 的复合主键
还有一个名为 StreamProcessor 的 Lambda 函数,它以 Publisher table 的流作为输入。
出版商看起来像这样
PK | SK | Message |
---|---|---|
P#<id> |
M#<id0> |
Some Message |
P#<id> |
M#<id1> |
Some Message |
P#<id> |
M#<id2> |
Some Message |
P#<id> |
M#<id3> |
Some Message |
P#<id>
其中 <id>
是发布者的 ID,M#<id0>
是消息 ID。
订阅者 看起来像这样:
PK | SK | Contact |
---|---|---|
P#<id> |
S#<id0> |
test1@mail.com |
P#<id> |
S#<id1> |
test2@mail.com |
P#<id> |
S#<id2> |
test3@mail.com |
P#<id> |
S#<id3> |
test4@mail.com |
P#<id>
其中 <id>
是发布者的 ID,S#<id0>
是订阅 ID。
现在只要发布者 table 发生变化(例如,新消息被添加到发布者),StreamProcessor
Lambda 就会被调用。
StreamProcessor
然后可以做这样的事情:
- 从更新记录中提取发布者 ID
- 使用
PK=P#<id>
查询订阅者 table 以获取订阅者列表 - 对于每个结果:
- 确定联系方式
- 向订阅者发送消息