AWS SNS交付状态

时间:2016-10-28 11:00:45

标签: php amazon-web-services amazon-sns amazon-cloudwatch amazon-cloudwatchlogs

我是Aws的新手,我正在使用Aws SNS发送通知,我发送通知给不同的主题而不是端点。这很完美。

当我publish通知时,我得到了像

这样的数组
object(Aws\Result)#84 (1) {
    ["data":"Aws\Result":private]=>
       array(2) {
         ["MessageId"]=>
         string(36) "************-7a29-591f-8765-************"
         ["@metadata"]=>
         array(4) {
         ["statusCode"]=>
         int(200)
         ["effectiveUri"]=>
        string(40) "https://sns.ap-southeast-1.amazonaws.com"
        ["headers"]=>
        array(4) {
            ["x-amzn-requestid"]=>
            string(36) "************-b737-5831-abf4-************"
            ["content-type"]=>
            string(8) "text/xml"
            ["content-length"]=>
            string(3) "294"
            ["date"]=>
            string(29) "Fri, 28 Oct 2016 08:59:05 GMT"
        }
        ["transferStats"]=>
            array(1) {
               ["http"]=>
               array(1) {
               [0]=>
               array(0) {}
            }
        }
    }
}

我在服务器端使用php, 如何通过此message id获取所有接收者的通知投放状态?

感谢预期。

2 个答案:

答案 0 :(得分:2)

您正在询问如何获取通过Amazon SNS发送的消息的通知传递状态

Using Amazon SNS Topic Attributes for Message Delivery Status文档说:

  

Amazon SNS支持记录发送到具有以下Amazon SNS端点的主题的通知消息的传递状态

     
      
  • 应用
  •   
  • HTTP
  •   
  • LAMBDA
  •   
  • SQS
  •   
     

配置邮件传递状态属性后,日志条目将发送到CloudWatch Logs ,以发送给订阅Amazon SNS端点的主题的邮件。

我找不到message_id请求状态的特定API调用。相反,日志信息似乎会发送到 CloudWatch Logs 。您需要解析日志以发现状态。

答案 1 :(得分:0)

  1. 为 AWS Cloudwatch 启用“交付状态日志记录”More Info
  2. 调整用户(在脚本中使用)以访问 AWS Cloudwatch 日志
  3. 使用 awssdk for php 从 cloudwatch 读取日志条目

查看下面的示例代码

let humanScore = 0,
  computerScore = 0,
  currentRoundNumber = 1;

// Write your code below:

const generateTarget = () => {
  return Math.floor(Math.random() * 10);
};

const compareGuesses = () => {
  // Humun & Computer guess a number
  const humanGuess = 1;
  const computerGuess = 2;
  // Call the generateTarget functions
  const secretTargetNumber = generateTarget();
  // Compare the difference between Target number and humun guess number
  const humanTarget = Math.abs(humanGuess - secretTargetNumber);
  // Compare the difference between Target number and computer guess number
  const computerTarget = Math.abs(computerGuess - secretTargetNumber);
  // Return true if humun won, false if computer won
  if (humanTarget < computerTarget) {
    return true;
  } else {
    return false;
  }
};


let updateScore = () => {
  switch (compareGuesses()) {
    case true:
      return humanScore += 1;
    case false:
      computerScore += 1;
  }
};

let showScore = () => {
  updateScore();

  console.log(humanScore)
  console.log(computerScore)
}

我相信它会帮助某人