SNS
由eu-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
发送消息,这是从控制台发送的最后一条消息。
我不知道造成这种情况的原因。
答案 0 :(得分:0)
您的队列是否配置为重新发送未从队列中删除的邮件?这是队列的一种非常常见的配置。典型的流程是:
如果消息未被删除,则将在稍后读取队列时重新发送该消息,从而最终处理该消息。这使得系统在面对队列消费者时可靠,这些消费者可能在处理消息的过程中死亡(在任何实际系统中始终)。许多人将此安排称为&#34;至少一次交付&#34;