繁体   English   中英

AWS api 网关与 AWS SQS 集成中的消息属性的具体格式是什么?

[英]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 控制台中,以上格式均不可接受。

我找不到消息属性的任何正确值格式。

非常感谢你

用于 SQS 集成的 AWS API Gateway 控制台

更新:

我尝试了一种对我有用的解决方案:

因为我可以控制服务的客户端,所以我定义了一个新的自定义 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}"
  }
}

控制台

生成的 SQS 消息

目前看来,在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM