首页 > 解决方案 > 连接时在 AWS API 网关 websocket api 中收到的 Java 对象

问题描述

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

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

HttpProxy:https
://xxx.xxxxxx.com/create-connection 我决定使用有效负载作为 HttpProxy 的请求正文进行 POST 调用。

还可以使用 AWS CLI 设置请求参数:

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

但仍然没有得到参数中的connectionId

标签: javaamazon-web-serviceswebsocketaws-api-gatewayreal-time

解决方案


一种解决方法可能是,但对于发送连接 ID,请求标头在这里为我解决了这种情况。我们可以将集成请求中的连接 id 映射到 Http 代理的请求头。
此外,AWS 控制台还不支持此配置,我们需要使用 aws-cli 来配置它。
参考文档

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

您还可以转发其他连接细节,请参阅文档

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

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


推荐阅读