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

问题描述

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

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

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

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

$connect

但仍无法在参数中获取connectionId

解决方法

一种解决方法可能是,但是对于发送连接ID,请求标头在这里为我解决了这种情况。我们可以将连接ID​​从Integration请求映射到Http Proxy的请求标头。
此外,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网址,则它将无法识别带有参数的网址。您需要将整个网址放在双引号中。

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