我从Amplify Cli中为我的角度项目创建AppSync API。
该网站可以订阅OnChangeListner,其中DynamoDB通过突变进行更新。可以。
async ngOnInit() {
this.api.OnUpdateTableListener.subscribe({
next: resp => {
console.log("update !!!");
console.log("update: " + JSON.stringify(resp));
let update = resp.value.data.onUpdateTable;
this.items = this.items.map(function(a) {
return a.id === update.id ? update : a;
});
}
});
}
async update(selectedItem) {
const update = {
id: selectedItem.id,
status: !selectedItem.status
};
await this.api.UpdateTable(update);
}
但是,我注意到,如果手动更新DynamoDB,则订阅根本无法正常工作。
关于如何更新DynamoDB(不是通过突变)和AppSync订阅的任何建议仍然有效。
答案 0 :(得分:0)
AppSync只能通过订阅传递通过突变传递给它的消息。如果对DynamoDB表进行了更改,确保消息始终通过订阅传递的一种方法是将Kinesis流添加到表中,只要对表进行更改,它就会发出事件。然后,您可以让Lambda函数订阅此Kinesis流,并对AppSync进行Mutation调用,以将修改后的数据通过“订阅”发送到连接的客户端。参见图:
答案 1 :(得分:0)
您可以在特定表上启用DynamoDB流,然后将触发器设置为所需的任何内容(lambda,sns等):https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html
这样,无论表如何更新,订阅到其流的任何内容都将知道它。