java - 使用 messageStructure json 和指定的 messageType 为消息创建 Amazon SNS 订阅者

标签 java amazon-sns

我想订阅 Amazon SNS 主题;我的订户已使用协议(protocol)“http”注册。

amazonSNSClient.subscribe(new SubscribeRequest(topicArn, "http", callbackUrl);

发布消息时,messageStructure 设置为“json”,消息内容包含“default”、“http”和“https”条目。

JSONObject jsonMessage = new JSONObject();
jsonMessage.put(DEFAULT, "foo");
jsonMessage.put(HTTPS, someOtherJsonObject);
jsonMessage.put(HTTP, someOtherJsonObject);

PublishRequest publishRequest = new PublishRequest(topicArn, jsonMessage.toString());
publishRequest.setMessageStructure(MESSAGE_TYPE_JSON);
amazonSNSClient.publish(publishRequest);

Amazon 成功接收已发布的消息,并向订阅者发送通知。 AWS 控制台中的验证确认我的订阅者订阅了“http”协议(protocol)。但是,订阅者收到“默认”消息而不是“http”(json) 消息。可能出了什么问题,为什么亚马逊向订阅者推送“默认”通知而不是“http”通知?

最佳答案

您能否向我们展示正在发送的确切字符串?我的猜测是,当您实际上应该只使用字符串时,您正在将 JSON 结构嵌入到消息中。

例如,我知道您正在发送如下内容:

{
  "default": "foo",
  "http": {"anotherThing":1},
}

实际上您需要发送的是:

{
  "default": "foo",
  "http": "{\"anotherThing\":1}",
}

我会尝试将代码更改为:

JSONObject jsonMessage = new JSONObject();
jsonMessage.put(DEFAULT, "foo");
jsonMessage.put(HTTPS, someOtherJsonObject.toString());
jsonMessage.put(HTTP, someOtherJsonObject.toString());

PublishRequest publishRequest = new PublishRequest(topicArn, jsonMessage.toString());
publishRequest.setMessageStructure(MESSAGE_TYPE_JSON);
amazonSNSClient.publish(publishRequest);

关于java - 使用 messageStructure json 和指定的 messageType 为消息创建 Amazon SNS 订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21437481/

相关文章:

amazon-web-services - 使用 aws sns 从 Java Web 应用程序发送短信

java - 如何递归地求解程序

java - 寻找一种网站在客户端监控文件的方法

amazon-web-services - AWS CloudFormation 将 SNS 仅限制到特定 SQS 队列

java - 确认 SNS 订阅者的 HTTP 端点

Python boto3 SNS 电子邮件格式(每个字符串换行)

java - 如何使用 spring data cassandra 创建表?

java - 可以焊接 (JSR-299) 和 JBoss AS 5.1 吗?

java - 如果在属性文件中找不到属性,则打印系统属性名称

java - Amazon SNS 客户端无法发布到主题