Amazon SNS: MessageAttributes TTL

Мы используем Amazon SNS для нашего сервиса push-уведомлений. Раньше он работал нормально, пока я не подумал включить TTL в MessageAttributes. В основном для целей тестирования я хочу сохранить время TTL равным 60 секундам.

Я использую РестКлиент. Я не использую Amazon SDK.

def publish(endpoint_arn, message,message_attribute)
    params = {
            :TargetArn => endpoint_arn,
            :Message => JSON.dump(message),
            :MessageStructure => 'json',
            :MessageAttributes => {
                message_attribute => {
                    :DataType => 'String',
                    :StringValue => '60'
                }
            }
        }
     post(:Publish, params)
end

message_attribute — это строка, содержащая «AWS.SNS.MOBILE.GCM.TTL».

def post(command, params)
    params.merge!(default_post_params(command))
    params[:Signature] = calculate_signature(params, 'POST')
    response = RestClient.post(SNS_URL, params)
end

Что не так в приведенном выше коде, в документе Amazon говорится, что я сделал правильно.

Справочник по API Amazon SDK: http://docs.aws.amazon.com/sns/latest/dg/sns-ttl.html

PS: default_post_params, будет иметь общие параметры сообщения, такие как ключ доступа, URL-адрес SNS. И это работает нормально. Только после включения ключа MessageAttributes он говорит:

<Error>
  <Type>Sender</Type>
  <Code>MalformedQueryString</Code>
  <Message>Keys may not contain [</Message>
</Error>

person Ronak Jain    schedule 23.09.2014    source источник


Ответы (1)


Ошибка возникает из-за отсутствия ключа и значения словаря.

В атрибуте сообщения есть два ключа

1.DataType
2.StringValue

Создайте словарь и добавьте эти два ключа в словарь со значением.

Определенно это сработает.

person Sanjay Dwivedi    schedule 04.12.2014