[英]What is the specific format Message attributes in AWS api gateway integration with AWS SQS?
设想:
我想要一个 AWS API 网关路由,将 HTTP POST 调用请求正文转发到 AWS SQS 服务。 我使用 API 网关的新 AWS 控制台界面和 Amazon Simple Queue Service 作为集成目标成功地做到了这一点。
现在,问题是我想将特定请求 header 值作为消息属性发送到 SQS,但控制台中可接受的格式非常模糊!
我尝试了在文档、线程和书籍中找到的任何我能找到的东西,甚至尝试了其他服务值格式中的一些类似符号,但没有任何效果。
当我尝试像下面这样为 Message 属性设置不同的值时,它开始返回 400 错误状态代码以响应之前有效的 HTTP 请求。
我只想将请求正文中的请求 header 发送到 SQS,因此我有存储在请求 header 上的基本数据来处理消息。
尝试值:
- $request.header.valueX
- {"somename":"$request.header.valueX"}
- {"Name":"somename","Value":{"DataType":"String","StringValue":"$request.header.valueX"}}
在 API SQS 网关集成中的消息属性(可选)高级设置的 AWS 控制台中,以上格式均不可接受。
我找不到消息属性的任何正确值格式。
非常感谢你
更新:
我尝试了一种对我有用的解决方案:
因为我可以控制服务的客户端,所以我定义了一个新的自定义 header (sample1),其值采用以下格式:
{"CUSTOM-ATTRIBUTE-NAME": {"DataType": "String", "StringValue": "CUSTOM-ATTRIBUTE-VALUE"}}
在 API 网关的 SQS 集成页面中的消息属性 - 可选中,我将值设置为$request.header.sample1
custom-attribute-name 将是 SQS 消息属性名称,CUSTOM-ATTRIBUTE-VALUE 将是值。
现在,当我收到来自 SQS 的消息时,我在消息属性中同时拥有完整的请求消息正文和自定义的 header。
一年太晚了......但我只是让这个语法在消息属性字段中工作:
{
"product":
{
"DataType":"String",
"StringValue":"${request.path.product}"
}
}
目前看来,在 HTTP API 中手动定义此类集成似乎是不可能的,如最近的 reddit 帖子中所示。 该帖子还表明这已得到 AWS 支持部门的确认。
通过 HTTP api 将属性添加到 SQS 消息的唯一方法是简单地将它们与消息一起发布,例如使用 curl:
curl -i -X POST https://44444444.execute-api.ap-southeast-2.amazonaws.com/sqs -H "Content-Type: application/json" --data '{"MessageBody":"ggg","MessageAttributes":{"newattribte":{"StringValue":"safffmple","DataType":"String"}}}'
当Message attributes - optional
设置为$request.body.MessageAttributes
。
另一种方法是更改为 REST API,这将是未来的延伸,并且 API 和 SQS 之间的这种集成是可能的。
不确定解决方案是什么? 我正在尝试:{“CUSTOM-ATTRIBUTE-NAME”:{“DataType”:“String”,“StringValue”:“$request.header.myheader”}},但这不起作用。 知道我该怎么做吗? 我通过 postman 调用并在 header 值中发送 myheader。
与 Laurie 提到的类似,如果您想将请求 header 作为消息属性传递,请在 Message 属性字段中使用此语法,
{
"your-message-attribute": {
"DataType": "String",
"StringValue": "${request.header.your-header-name-in-request}"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.