ruby 如何在Rails中读取Amazon SNS响应?

3ks5zfa0  于 2023-04-05  发布在  Ruby
关注(0)|答案(2)|浏览(91)

我有一个录制视频的应用程序,然后通过Amazon Elastic转码器对其进行转码。当它完成转码时,Amazon SNS会发送回一个文件,说明视频已完成转码,沿着有关视频的信息(文件名,持续时间等)作为POST请求发送到我的用户配置文件页面。这是作为文本/纯内容类型发送回来的,但格式为JSON文件。
所有这些都可以正常工作(从Amazon的Angular 来看),但是我如何(在Rails应用程序中)捕获正在发送的SNS文件的内容呢?
编辑:Amazon Response(to /*/profile,response code 404 Not Found){ "Type" : "Notification", "MessageId" : "6e311e3a-b0ed-5124-8578-4e72843d35b1", "TopicArn" : "arn:aws:sns:us-west-1:224636007242:soundstream_video_transcoding_complete", "Subject" : "Amazon Elastic Transcoder has finished transcoding job 1473131144092-6ti9g6.", "Message" : "{\n \"state\" : \"COMPLETED\",\n \"version\" : \"2012-09-25\",\n \"jobId\" : \"1473131144092-6ti9g6\",\n \"pipelineId\" : \"1466964609042\",\n \"input\" : {\n \"key\" : \"45423012/97061c7f-465f-46ec-80dd-6a92b474fd58/archive.mp4\",\n \"frameRate\" : \"auto\",\n \"resolution\" : \"auto\",\n \"aspectRatio\" : \"auto\",\n \"interlaced\" : \"auto\",\n \"container\" : \"mp4\"\n },\n \"outputs\" : [ {\n \"id\" : \"1\",\n \"presetId\" : \"1469647121114-zvgtx6\",\n \"key\" : \"transcoded/video-97061c7f-465f-46ec-80dd-6a92b474fd58.mp4\",\n \"thumbnailPattern\" : \"thumbnails/97061c7f-465f-46ec-80dd-6a92b474fd58/video-{count}\",\n \"status\" : \"Complete\",\n \"duration\" : 10,\n \"width\" : 640,\n \"height\" : 480\n } ]\n}", "Timestamp" : "2016-09-06T03:05:52.728Z", "SignatureVersion" : "1", }

i7uq4tfw

i7uq4tfw1#

这里有两件事要检查:1)订阅的SNS主题是什么?进入AWS控制台,通过ARN查找主题并查看订阅的端点。这是您所期望的吗?2)确保您的端点是公共的,并且您有Map到端点的路由。404最有可能意味着您的rails应用不知道如何处理路由和/或没有Map到它的资源。
一旦你有了1)和2),你需要将消息解析为json,并检查你感兴趣的字段。

zdwk9cvp

zdwk9cvp2#

自2023年3月23日起,Amazon SNS现在支持自定义Content-Type标头,用于从主题交付的HTTP消息。以下是公告帖子:https://aws.amazon.com/about-aws/whats-new/2023/03/amazon-sns-content-type-request-headers-http-s-notifications/
您必须修改Amazon SNS订阅的DeliveryPolicy属性,将headerContentType属性设置为application/json或支持的任何其他值。您可以在此处找到支持的所有值:https://docs.aws.amazon.com/sns/latest/dg/sns-message-delivery-retries.html#creating-delivery-policy

{
    "healthyRetryPolicy": {
        "minDelayTarget": 1,
        "maxDelayTarget": 60,
        "numRetries": 50,
        "numNoDelayRetries": 3,
        "numMinDelayRetries": 2,
        "numMaxDelayRetries": 35,
        "backoffFunction": "exponential"
    },
    "throttlePolicy": {
        "maxReceivesPerSecond": 10
    },
    "requestPolicy": {
        "headerContentType": "application/json"
    }
}

您可以通过调用SubscribeSetSubscriptionAttributes API操作来设置DeliveryPolicy属性:

CloudFormation也支持。干杯!

相关问题