You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS AppSync订阅报MQTT不支持错误 新API下如何实现正常订阅

报错原因

新建的AppSync API默认关闭了基于MQTT over WebSocket的旧订阅通道,当前代码因为Amplify客户端默认走旧MQTT传输链路发起订阅请求,触发服务端的BadRequest异常。整体调整方向是通过配置切换到原生WebSocket over HTTP的实时订阅通道,已编写的GraphQL订阅语句、业务调用逻辑不需要做本质修改。

配置调整步骤

第一步:升级依赖版本

  • 将项目内的aws-amplify依赖升级到v11.0.0及以上版本,低版本客户端没有内置关闭MQTT通道的配置开关,依旧会强制走旧协议发起请求
  • 移除项目中独立安装的@aws-amplify/pubsub MQTT相关依赖包,避免客户端自动加载旧MQTT传输逻辑
    升级依赖的命令为:
    npm install aws-amplify@^11

第二步:修改Amplify初始化配置

在项目全局的Amplify初始化配置文件中,新增订阅传输层的配置,强制禁用MQTT通道,启用原生实时通道,示例配置如下:

// 原有所有Auth、API基础配置完全保留
Amplify.configure({
  Auth: {
    // 原有Auth配置内容不做修改
  },
  API: {
    GraphQL: {
      // 原有endpoint、region、defaultAuthType配置不做修改
      subscriptions: {
        // 显式禁用MQTT客户端能力
        mqttClient: {
          enabled: false
        },
        // 启用原生WebSocket实时订阅处理器
        realtimeHandlers: {
          enabled: true
        }
      }
    }
  }
})

第三步:验证调用逻辑

你在类组件中编写的订阅调用代码完全不需要修改,配置生效后客户端会自动切换为通过HTTP协议发起WebSocket升级握手的方式建立实时连接,不会再向服务端发起MQTT协议的订阅请求:

// 原有业务代码无需改动
API.graphql(
  graphqlOperation(subscriptions.OnCreateMessage, {conversationId: "c074c7b7-f6db-459a-a1d8-cd290aee33ea"})
).subscribe({
  next: ({ provider, value }) => console.log({provider, value}),
  error: error => console.warn("did not get messages")
});
常见排查点
  • 确认对应AppSync API的实时推送能力处于开启状态,没有在控制台手动关闭原生WebSocket订阅功能
  • 排查项目内是否存在自定义重写GraphQL连接逻辑的代码,比如手动指定MQTT协议的连接路径,这类代码会绕过全局配置强制走旧协议
  • 核对订阅的参数匹配规则:代码中传入的messageConversationId过滤参数需要和GraphQL schema中定义的订阅入参完全一致,避免因为参数不匹配触发额外的请求异常

内容的提问来源于stack exchange,提问作者Mikey K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 18:15:03