使用Ruby SDK从SNS接收消息时使用AWS SQS JSON格式

我有一个订阅了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 /平方不逃避双引号?


找到答案。

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


在发布消息之前,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();**

}


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

请参阅AWS中的以下文档:

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

链接地址: http://www.djcxy.com/p/32197.html

上一篇: AWS SQS JSON format when receiving message from SNS with Ruby SDK

下一篇: Customizing Amazon SNS email notifications