【问题标题】:AWS AppSync: How to listen to change from DynamoDB (not by mutation)AWS AppSync:如何监听来自 DynamoDB 的变化(不是通过突变)
【发布时间】:2019-11-02 12:18:21
【问题描述】:

我从 Amplify Cli 为我的 Angular 项目创建 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 订阅的任何建议仍然有效。

【问题讨论】:

  • 我很失望地发现它默认不这样做。当我阅读 AppSync 将支持 graphql 订阅时,我假设它具有连接来自它正在使用的各种数据源的更改的实现......但似乎并非如此。

标签: node.js amazon-dynamodb aws-amplify aws-appsync


【解决方案1】:

AppSync 只能通过订阅传递通过突变传递给它的消息。如果对 DynamoDB 表进行更改,确保始终通过订阅传递消息的一种方法是将 Kinesis 流添加到表中,该流将在表发生更改时发出事件。然后,您可以让 Lambda 函数订阅此 Kinesis 流并对 AppSync 进行 Mutation 调用,以通过订阅将修改后的数据发送到连接的客户端。见图表:

【讨论】:

  • 感谢您的建议,是不是意味着 Dynamodb 会更新两次,一次来自 aws sdk,一次来自 AppSync Mutation?
  • 谢谢,我想我需要从 S3 发布到 API,而不是直接与 DynamoDB 对话 .. 由于我在 Amplify 上,所以不想把它搞疯了
【解决方案2】:

您可以在特定表上启用 DynamoDB 流,然后将触发器设置为您想要的任何内容(lambda、sns 等):https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html

这样,无论表格如何更新,订阅其流的任何内容都会知道它。

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 2019-04-13
    • 2021-09-19
    • 2019-12-27
    • 1970-01-01
    • 2020-05-02
    • 2018-12-02
    • 2019-03-21
    • 2020-02-01
    相关资源
    最近更新 更多