首页 文章

使用messageStructure json和指定的messageType为消息创建Amazon SNS订户

提问于
浏览
1

我想订阅Amazon SNS主题;我的订户注册了协议“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);

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

1 回答

  • 1

    你能告诉我们发送的确切字符串吗?我的猜测是,当你应该只使用字符串时,你正在将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);
    

相关问题