java - 连接时在 AWS API 网关 websocket api 中收到的 Java 对象
问题描述
我需要将连接 ID 存储在数据库中,因此在$connect
调用 API 时,我希望在针对$connect
API 网关 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
解决方案
一种解决方法可能是,但对于发送连接 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¶m2=2"
推荐阅读
- java - 当我运行 spring 批处理作业时,chunkListener 不运行
- javascript - 反应如何调用一个道具
- github - 是否必须先在 github 上 fork 一个项目才能提出拉取请求?
- c# - Web服务上的调用按钮丢失
- c++ - C ++中“::delete”的目的是什么?
- google-apps-script - 谷歌表格到谷歌日历应用脚本帮助/审查
- mysql - 如何从 user 和 usermeta 表中选择最后一个用户信息?
- angular - 在 app.component.ts 中的 init 上运行函数
- java - 从tomcat java运行Webdriver
- java - TOTP / HOTP / HmacSHA256 与 Java 中的无符号字节密钥