0

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

Я использую RestClient. Я не использую SDK Amazon.

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 документ говорит, что я сделал правильно.

Amazon SDK API Reference: http://docs.aws.amazon.com/sns/latest/dg/sns-ttl.html

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

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

ответ

0

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

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

1.DataType 
2.StringValue 

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

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

Смежные вопросы