在 .NET& 中工作,我有一些 SQS 队列正在处理报告周围的应用程序事件。
在某一时刻,会生成一份报告 PDF,并将报告元数据(例如位置和 ReportId)发布到
Report-Built
SQS 队列。
我有一个 EventBridge Pipe,它可以获取这些
Report-Built
SQS 队列事件,并将 SQS 消息的正文推送到 SNS 主题 Report-Ready
,以便任何应用程序都可以创建自己的 SQS 队列订阅来使用这些事件。
一切看起来都很好,除了当我使用最终的 SQS 队列订阅时,消息丢失了它的 JSON 格式并且不会在我的应用程序中反序列化。
已发布至 SQS
Report-Built
我的 EventBridge Pipe 使用目标输入转换器提取正文
<$.body>
并将其发布到 SNS 主题 Report-Ready
此时,我创建了 SQS 队列来订阅名为
Report-Ready-TTL-Monitor
的特定应用程序的 SNS 主题。我的订阅有 Raw message delivery
选项 Enabled
,这样我就可以在 SQS 正文属性中获取消息,而不是也将其包装在 SNS 消息属性中。
我期望我的
Report-Ready-TTL-Monitor
SQS 身体是:
{
"ReportId": "GIUD_STRING",
"ReportUri": "https://example.com/path/file.pdf"
}
但是我的身体是:
{ReportId:GIUD_STRING,ReportUri:https://example.com/path/file.pdf}
JsonConvert.DeserializeObject<ReportReadyNotification>(message.Body)
进行反序列化失败
如果我直接将消息发布到我的 SNS 主题
Report-Ready
,SQS 队列订阅会正确接收该消息并且一切正常。
非常感谢任何关于我在这里缺少的可能会改变我的消息正文的帮助或指导?
不幸的是,目前这是输入变压器的“设计”技术限制。如果转换器是一个简单的字符串,即模板中不包含 JSON 对象,则转换器会假定一个字符串并将删除任何引号。
这里唯一的解决方案是将 <$.body> 包装到带键的 JSON 对象中:
{"someNecessaryNestedKey": <$.body>}