无论是否定义了值,AWS SNS发布始终都会使用相同的消息发送

时间:2015-10-26 16:27:31

标签: amazon-web-services clojure amazon-sns

SNSeu-west-1托管AWS主题。

如果我登录aws sns控制台并手动发布到终点,那么通知会正确地发送到具有正确数据的设备。

但是我有一个简单的clojure服务器,它使用Amazonica库来处理aws API调用,无论我发送到message主题的SNS是什么,通知都会到达带有上次在SNS控制台中使用的消息的设备。

示例:

登录SNS控制台并发送以下内容:

{
"default": "Test data", 
"email": "Test data", 
"sqs": "Test data", 
"lambda": "Test data", 
"http": "Test data", 
"https": "Test data", 
"sms": "Test data", 
"APNS": "{\"aps\":{\"alert\": \"Test data\"} }", 
"APNS_SANDBOX":"{\"aps\":{\"alert\":\"Test data\"}}", 
"APNS_VOIP":"{\"aps\":{\"alert\":\"Test data\"}}", 
"APNS_VOIP_SANDBOX": "{\"aps\":{\"alert\": \"Test data\"} }", 
"MACOS":"{\"aps\":{\"alert\":\"Test data\"}}", 
"MACOS_SANDBOX": "{\"aps\":{\"alert\": \"Test data\"} }", 
"GCM": "{ \"data\": { \"message\": \"Test data\" } }", 
"ADM": "{ \"data\": { \"message\": \"Test data\" } }", 
"BAIDU": "{\"title\":\"Test data\",\"description\":\"Test data\"}", 
"MPNS" : "<?xml version=\"1.0\" encoding=\"utf-8\"?><wp:Notification xmlns:wp=\"WPNotification\"><wp:Tile><wp:Count>ENTER COUNT</wp:Count><wp:Title>Test data</wp:Title></wp:Tile></wp:Notification>", 
"WNS" : "<badge version\"1\" value\"23\"/>"
}

这是使用控制台的generate JSON功能生成的。这可以按预期使用消息Test data到达。一切都是金色的。

但是,如果我在clojure中执行以下操作:

(defn- sns-push [body]
  (sns/publish (env :sns) :topic-arn "arn:aws:sns:eu-west-1:xxxxxxxxxxsecret"
                          :subject "Dummy Subject"
                          :message "Dummy message"))

如果(env :sns)设置正确,则会发送通知,但不会发送消息Dummy message,而是使用Test data发送消息,这是从控制台发送的最后一条消息。

我不知道造成这种情况的原因。

1 个答案:

答案 0 :(得分:0)

您的队列是否配置为重新发送未从队列中删除的邮件?这是队列的一种非常常见的配置。典型的流程是:

  1. 收到消息
  2. 处理并保存结果
  3. 如果结果已保存,请删除该消息。 否则不要将其从队列中删除。
  4. 如果消息未被删除,则将在稍后读取队列时重新发送该消息,从而最终处理该消息。这使得系统在面对队列消费者时可靠,这些消费者可能在处理消息的过程中死亡(在任何实际系统中始终)。许多人将此安排称为&#34;至少一次交付&#34;