我有一个由AWS托管的eu-west-1中的SNS主题。
如果我登录到aws sns控制台并手动发布到mind end,则通知将正确发送到具有正确数据的设备。
然而,我有一个简单的clojure服务器,它使用Amazonica库来处理aws API调用,并且无论我向我的SNS主题发送什么message,通知都会与上次在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)设置正确的情况下,将发送通知,但不是使用Test data发送消息Dummy message,而是使用控制台发送的最后一条消息。
我不知道是什么导致了这种情况的发生。
发布于 2015-10-27 00:39:54
您的队列是否配置为重新发送未从队列中删除的消息?这是队列的一种非常常见的配置。典型的流程是:
接收message
如果消息未被删除,则稍后读取队列时将重新发送该消息,从而允许最终处理该消息。这使得系统在面对可能在处理消息中途死亡的队列使用者时是可靠的(这在任何实际系统中都是如此)。许多人将这种安排称为“至少一次交付”。
https://stackoverflow.com/questions/33350801
复制相似问题