Amplify GraphQL 订阅不响应事件

Posted

技术标签:

【中文标题】Amplify GraphQL 订阅不响应事件【英文标题】:Amplify GraphQL subscriptions don't respond to events 【发布时间】:2021-01-29 15:47:41 【问题描述】:

我目前正在使用 AWS Amplify 框架构建一个 React Native 应用程序。 在我的应用程序中,应该有一个实时仪表板,当新项目添加到数据库时会更新。 为了实现此功能,我使用 Amplify 和 AppSync API 使用 GraphQL 订阅。

由于某种原因,订阅不会响应数据库上发生的事件。

这是我的代码:

import React,  useEffect  from 'react';
import  API, graphqlOperation  from 'aws-amplify';
import * as subscriptions from '../../src/graphql/subscriptions';

const App = () => 
    useEffect(() => 
        subscribeUsers();
    , []);

    const subscribeUsers = async () => 
        await API.graphql(graphqlOperation(subscriptions.onCreateUser, appId: appId)).subscribe(
            next: (todoData) => console.log(todoData),
            error: (err) => console.log(err)
        ); 
    

    ...


export default App;

这是我的 index.js 代码:

import AppRegistry from 'react-native';
import App from './App';
import name as appName from './app.json';
import Amplify from 'aws-amplify';
import config from './aws-exports';

AppRegistry.registerComponent(appName, () => App);
Amplify.Logger.LOG_LEVEL = 'DEBUG';
Amplify.configure(config);

调试日志显示连接已启动:

AWSAppSyncRealTimeProvider - subscription message from AWS AppSync RealTime: "id":"...","type":"start_ack"

此外,我每分钟都会收到一条日志消息,告诉我连接仍然存在,这很奇怪,因为我没有得到任何正在发生的事件的信息:

AWSAppSyncRealTimeProvider - subscription message from AWS AppSync RealTime: "type":"ka"
AWSAppSyncRealTimeProvider "id": "", "observer": null, "query": "", "variables": 

GraphQL 架构由 AppSync API 直接生成。

我的订阅有什么问题吗?

【问题讨论】:

在您的 dynamodb 表中进行更改时,是在其他用户使用带放大功能的 AppSync api 时完成,还是直接在 aws 控制台的 db 中或使用 aws sdk documentclient 完成更改(例如)?订阅仅在您通过 appsync api 更新或添加项目时收到消息,因为生成消息的是 aws appsync。直接对数据库进行的更改,在 appsync 之外不会发送任何消息,因为 appsync 永远不会收到更改已完成的消息。 哦,很高兴知道。我只使用控制台检查了它,没有使用 AppSync,所以我猜这就是导致问题的原因 【参考方案1】:

显然,我没有从订阅中获得任何更新的原因是因为我通过从 DynamoDB 控制台向数据库添加新项目来测试它,而 AppSync 订阅只有在使用相同的创建调用时才有效AppSync API。

【讨论】:

以上是关于Amplify GraphQL 订阅不响应事件的主要内容,如果未能解决你的问题,请参考以下文章

AWS Amplify AppSync 订阅:数据返回 null

我可以触发 Lambda 函数或 SNS 事件来响应 AppSync GraphQL 突变吗?

AWS Amplify GraphQL Schema 导致错误

Amplify 和 AppSync 不更新来自多个来源的突变数据

Apollo GraphQL - 订阅响应中不包含相关类型

放大/反应 AppSync graphql 订阅 @auth 错误