AWS SQS > EventBridge Pipe > SNS > SQS 失去 JSON 格式

问题描述 投票:0回答:1

在 .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 队列订阅会正确接收该消息并且一切正常。

非常感谢任何关于我在这里缺少的可能会改变我的消息正文的帮助或指导?

c# .net amazon-web-services amazon-sns aws-event-bridge
1个回答
0
投票

不幸的是,目前这是输入变压器的“设计”技术限制。如果转换器是一个简单的字符串,即模板中不包含 JSON 对象,则转换器会假定一个字符串并将删除任何引号。

这里唯一的解决方案是将 <$.body> 包装到带键的 JSON 对象中:

{"someNecessaryNestedKey": <$.body>}
© www.soinside.com 2019 - 2024. All rights reserved.