Java 连接时在 AWS API 网关 websocket api 中收到对象

Java object received in AWS API gateway websocket api on connect

我需要将连接 ID 存储在数据库中,因此在对 API 的 $connect 调用中,我想在 Spring 中接收包含连接 ID 和消息的负载] 启动 Java HttpProxy 中的控制器针对 API 网关 WebSocket 协议中的 $connect 创建。

WebSocket URL: wss://xxxx.execute-api.us-west-2.amazonaws.com/test

HTTP 代理:https://xxx.xxxxxx.com/create-connection
我决定使用负载作为 HttpProxy 的请求主体进行 POST 调用。

同时使用 AWS CLI 设置请求参数:

"RequestParameters": {
    "integration.request.header.connectionId": "context.connectionId"
}

但是还是获取不到参数中的connectionId

可能有解决方法,但对于发送连接 ID,请求 headers 解决了我这里的情况。我们可以将集成请求中的连接 ID 映射到 Http 代理的请求 header。
此外,AWS 控制台尚不支持此配置,我们需要使用 aws-cli 来配置它。
参考 documentation,

aws apigatewayv2 update-integration \
    --integration-id abc123 \
    --api-id a1b2c3d4 \ 
    --request-parameters 'integration.request.header.connectionId'='context.connectionId'

您还可以转发其他连接详情,参考documentation

您还可以将参数发送到 websocket URL,它将按原样转发到 Http 代理。
如果您使用 wscat 从终端 运行 ZSH 连接到 websocket url,那么它将无法识别带参数的 url。您需要将整个 url 放在双引号中。

➜  ~ wscat -c "wss://xxxx.execute-api.<region>.amazonaws.com/<stage-name>?param=1&param2=2"