閱讀911 返回首頁    go 魔獸


隊列方式接收通知__接收消息通知_開發人員指南_視頻點播-阿裏雲

返回:簡介 >>

接收消息通知-隊列-PHP

這裏簡單介紹一下消息服務的要求和安裝說明,詳細請參考消息服務提供的文檔:SDK下載隊列使用手冊

示例的語言采用PHP,其他語言使用說明,請參考消息服務提供的文檔:SDK使用手冊

  • 環境要求

    PHP 5.5+

  • 安裝

    從Aliyun下載消息服務的PHP SDK

    解壓到項目目錄,解壓後的目錄名是php_sdk

  • 示例代碼

    • 引用消息服務SDK

      1. require_once(dirname(__FILE__).'/php_sdk/mns-autoloader.php');
    • 初始化消息服務

      MNS對用戶的每個區域都配置了一個單獨的服務域名,規則是:https://${UserId}.mns.${Region}.aliyuncs.com 。示例代碼使用的華東1區域(cn-hangzhou),也可以替換為其他區域,例如華北2區域(cn-beijing)。

      1. use AliyunMNSClient;
      2. use AliyunMNSExceptionMnsException;
      1. $mns_client = new Client('https://'.$user_id.'.mns.cn-hangzhou.aliyuncs.com',
      2. $access_key_id, $access_key_secret);
      3. $queue = $mns_client->getQueueRef($queue_name);
    • 接收消息

      MNS接收到的每條消息都對應一個句柄,後續可以使用句柄操作這條消息(例如刪除消息)。

      另外,MNS支持批量接收消息來提高性能。參考MNS的文檔批量消費消息

      接收消息時,可以指定超時時間(示例設置了3秒超時),如果隊列中沒有消息,會發生超時並觸發異常。

      1. $receipt_handle = NULL;
      2. $message = null;
      3. try
      4. {
      5. $res = $queue->receiveMessage(3);
      6. echo "ReceiveMessage Succeed! n";
      7. $message = $res->getMessageBody();
      8. $receipt_handle = $res->getreceiptHandle();
      9. }
      10. catch (MnsException $e)
      11. {
      12. echo "ReceiveMessage Failed: " . $e . "n";
      13. }
    • 刪除消息

      消息不會主動從隊列刪除,必須顯示調用刪除消息,否則消息會一直保持在隊列中,下次還會繼續接收到同一個消息。

      1. try
      2. {
      3. $res = $queue->deleteMessage($receipt_handle);
      4. echo "DeleteMessage Succeed! n";
      5. }
      6. catch (MnsException $e)
      7. {
      8. echo "DeleteMessage Failed: " . $e . "n";
      9. }
    • 分析消息

      消息體是字符串,內容是一個JSON對象,需要通過json_decode轉換成對象,然後就可以分析JSON對象來獲取詳細信息了,示例打印了這次消息是哪個輸出文件觸發的媒體工作流執行。

      1. $json_message = json_decode($message);
      2. $input_file = $json_message->{'MediaWorkflowExecution'}->{'Input'}->{'InputFile'};
      3. echo '輸入文件 location:'.$input_file->{'Location'}.
      4. ' bucket:'.$input_file->{'Bucket'}.
      5. ' object:'.$input_file->{'Object'}."n";
    • 獲取視頻輸出的詳細信息

      獲取到消息詳細內容後,可以配合使用點播服務API獲取工作流執行的視頻詳細信息。示例打印出這次轉碼和截圖作業的輸出地址。

      如何安裝和配置點播服務的PHP SDK,參考文檔媒體庫SDK-PHP

      1. include_once 'aliyun-php-sdk-core/Config.php';
      2. use MtsRequestV20140618 as Mts;

      初始點播服務的client。

      1. $profile = DefaultProfile::getProfile('cn-hangzhou',
      2. $access_key_id,
      3. $access_key_secret);
      4. $mts_client = new DefaultAcsClient($profile);

      打印所有轉碼作業的輸出地址和基本信息。

      1. if (strcmp($json_message->{'Type'}, 'Report') == 0) {
      2. $activities = $json_message->{'MediaWorkflowExecution'}->{'ActivityList'};
      3. $transcode_job_ids = Array();
      4. for ($i=0; $i < count($activities); $i++) {
      5. if (strcmp($activities[$i]->{'Type'}, 'Transcode') == 0) {
      6. $transcode_job_ids[] = $activities[$i]->{'JobId'};
      7. }
      8. }
      9. $request = new MtsQueryJobListRequest();
      10. $request->setJobIds(join(',', $transcode_job_ids));
      11. $request->setRegionId('cn-hangzhou');
      12. $response = $mts_client->getAcsResponse($request);
      13. for ($i=0; $i < count($response->{'JobList'}->{'Job'}); $i++) {
      14. $output = $response->{'JobList'}->{'Job'}[$i]->{'Output'};
      15. $output_file = $response->{'JobList'}->{'Job'}[$i]->{'Output'}->{'OutputFile'};
      16. $video_properties = $response->{'JobList'}->{'Job'}[$i]->{'Output'}->{'Properties'};
      17. echo '轉碼輸出文件URL '.'https://'.$output_file->{'Bucket'}.'.'.
      18. $output_file->{'Location'}.'.aliyuncs.com/'.
      19. urldecode($output_file->{'Object'})."n";
      20. echo '轉碼輸出文件基本信息 '.$video_properties->{'Width'}.'x'.$video_properties->{'Height'}.
      21. ' duration:'.$video_properties->{'Duration'}."n";
      22. }
      23. }

      打印所有截圖作業的輸出地址。

      1. if (strcmp($json_message->{'Type'}, 'Report') == 0) {
      2. $activities = $json_message->{'MediaWorkflowExecution'}->{'ActivityList'};
      3. $snapshot_job_ids = Array();
      4. for ($i=0; $i < count($activities); $i++) {
      5. if (strcmp($activities[$i]->{'Type'}, 'Snapshot') == 0) {
      6. $snapshot_job_ids[] = $activities[$i]->{'JobId'};
      7. }
      8. }
      9. $request = new MtsQuerySnapshotJobListRequest();
      10. $request->setSnapshotJobIds(join(',', $snapshot_job_ids));
      11. $request->setRegionId('cn-hangzhou');
      12. $response = $mts_client->getAcsResponse($request);
      13. for ($i=0; $i < count($response->{'SnapshotJobList'}->{'SnapshotJob'}); $i++) {
      14. $snapshot_config = $response->{'SnapshotJobList'}->{'SnapshotJob'}[$i]->{'SnapshotConfig'};
      15. $output_file = $response->{'SnapshotJobList'}->{'SnapshotJob'}[$i]->{'SnapshotConfig'}->{'OutputFile'};
      16. echo '截圖輸出文件URL '.'https://'.$output_file->{'Bucket'}.'.'.
      17. $output_file->{'Location'}.'.aliyuncs.com/'.
      18. urldecode($output_file->{'Object'})."n";
      19. }
      20. }

返回:簡介 >>

最後更新:2016-10-14 23:03:19

  上一篇:go 請求安全令牌-Java示例代碼__上傳視頻文件_開發人員指南_視頻點播-阿裏雲
  下一篇:go 主題通知方式接收消息__接收消息通知_開發人員指南_視頻點播-阿裏雲