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¶m2=2"
我需要将连接 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¶m2=2"