【问题标题】:AWS SQS JSON format when receiving message from SNS with Ruby SDK使用 Ruby 开发工具包从 SNS 接收消息时的 AWS SQS JSON 格式
【发布时间】:2014-05-26 04:44:20
【问题描述】:

我有一个订阅 SNS 主题的 SQS 队列。当我向该主题发布新通知时,我使用以下代码(在 Sinatra 应用程序中):

jsonMessage =  {
    "announcement" => {     
        "first_name" => results['first_name'][:s],  
                        "last_name" => results['last_name'][:s],
                        "loc_code" => results['location'][:s], 
                        "note" => params['note_content']
    }
}

msgid = @announcments_topic.publish(jsonMessage.to_json, 
                                    {subject: "Note Created",
                                     message_structure: 'json' })

当我的队列监听器接收到这个通知时,相应哈希的消息部分如下所示:

"Message"=>"{\"announcement\":{\"first_name\":\"Eve\",\"last_name\":\"Salt\",\"loc_code\":\"Location\",\"note\":\"test\"}}"

在我的队列监听器中,我想使用这个哈希,但是当我尝试使用时

JSON.parse(result['Message'])

由于转义的双引号,我收到了意外的令牌错误。关于如何解决这个问题的任何建议?我没有正确地以 JSON 格式发送通知吗?如何让 sns/sqs 不转义双引号?

【问题讨论】:

    标签: ruby json amazon-web-services amazon-sqs amazon-sns


    【解决方案1】:

    找到了答案。

    问题在于我获取 JSON 的方式。我需要使用JSON.load(result['Message']),而不是JSON.parse(...)

    【讨论】:

    • 你帮我省了好几吨的担心!
    【解决方案2】:

    SNS 发布方法实际上在发布消息之前附加了转义字符。 这是文档http://docs.aws.amazon.com/sns/latest/api/API_Publish.html

    JSON 特定的约束:

    JSON 对象中与支持的传输协议对应的键必须具有简单的 JSON 字符串值。 这些值在用于传出消息之前将被解析(未转义)。 出站通知是 JSON 编码的(这意味着字符将被重新转义以便发送)。 值的最小长度为 0(允许使用空字符串“”)。 值的最大长度受整个消息大小的限制(因此,包括多个协议可能会限制消息大小)。 非字符串值将导致键被忽略。 与支持的传输协议不对应的密钥将被忽略。 不允许有重复的键。 未能解析或验证消息中的任何键或值将导致 Publish 调用返回错误(无部分传递)。

    所以在 java 中,我们使用以下指令获取 json 消息。这会从传入消息中删除转义字符。

    空句柄(消息消息){

        **String serializedMessage = SNSMessage.fromJson(message).getMessage();**
    

    }

    【讨论】:

      【解决方案3】:

      如果您不想处理消费者必须从传入消息中删除转义字符的问题,您也可以考虑在主题订阅上启用原始消息传递。

      请参考 AWS 中的以下文档:

      http://docs.aws.amazon.com/sns/latest/dg/large-payload-raw-message.html

      【讨论】:

        猜你喜欢
        • 2019-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-13
        • 2017-05-29
        • 2018-05-10
        • 1970-01-01
        • 2021-10-04
        相关资源
        最近更新 更多