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