如何在AWS AppSync中创建自定义订阅
AWS AppSync 新增自定义订阅操作步骤
1. 更新GraphQL Schema定义
首先在你的AppSync Schema中添加自定义订阅字段,通过@aws_subscribe指令关联触发该订阅的Mutation:
# 自定义订阅定义示例:监听指定群组的新消息 type Subscription { onNewGroupMessage(groupId: ID!): Message @aws_subscribe(mutations: ["sendGroupMessage"]) # 数组内填入触发订阅的Mutation名称,支持填多个 } # 需提前定义好对应触发用的Mutation(已存在则无需重复添加) type Mutation { sendGroupMessage(groupId: ID!, content: String!, senderId: ID!): Message } # 关联的消息类型示例 type Message { id: ID! groupId: ID! content: String! senderId: ID! timestamp: AWSDateTime! }
如果需要服务端自动过滤推送数据,可额外添加@aws_filter指令实现细粒度控制,比如仅给接收人推送私信:
type Subscription { onNewDirectMessage: Message @aws_subscribe(mutations: ["sendDirectMessage"]) @aws_filter(filters: { field: "receiverId", operator: "eq", value: "$context.identity.sub" }) }
2. 校验Mutation配置
无需为订阅单独配置Resolver,AppSync会自动处理订阅的分发逻辑,仅需要确保你关联的Mutation已经配置了正常可用的Resolver(数据源可以是DynamoDB、Lambda等),且Mutation执行后返回的字段结构和订阅要求的字段完全匹配,否则订阅不会触发推送。
3. 配置订阅授权规则
根据你使用的授权模式给订阅字段添加对应的权限控制:
- 若使用Cognito用户池授权,添加
@aws_cognito_user_pools指令限制仅登录用户可订阅 - 若使用IAM授权,添加
@aws_iam指令 - 若使用API Key授权,添加
@aws_api_key指令
示例:
type Subscription { onNewGroupMessage(groupId: ID!): Message @aws_subscribe(mutations: ["sendGroupMessage"]) @aws_cognito_user_pools }
4. 部署&测试
- 保存修改后的Schema,AppSync会自动部署更新
- 可通过AppSync控制台的「查询」页面测试:先开启订阅监听,再在另一个窗口执行对应Mutation,确认是否能正常收到推送
- 客户端调用示例(基于AWS Amplify JS):
import { API, graphqlOperation } from 'aws-amplify'; // 开启订阅 const subscription = API.graphql( graphqlOperation(` subscription OnNewGroupMessage($groupId: ID!) { onNewGroupMessage(groupId: $groupId) { id content senderId timestamp } } `, { groupId: '目标群组ID' }) ).subscribe({ next: (event) => console.log('收到新消息:', event.value.data.onNewGroupMessage), error: (err) => console.error('订阅出错:', err) }); // 取消订阅调用:subscription.unsubscribe()
注意:订阅的推送Payload是Mutation返回的完整结果,可在客户端订阅的查询语句中指定需要返回的字段减少传输数据量。
内容的提问来源于stack exchange,提问作者Balaji Venkatraman
相关产品推荐
相关产品推荐

