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 导致错误