队列方式接收通知__接收消息通知_开发人员指南_视频点播-阿里云
接收消息通知-队列-PHP
这里简单介绍一下消息服务的要求和安装说明,详细请参考消息服务提供的文档:SDK下载和队列使用手册。
示例的语言采用PHP,其他语言使用说明,请参考消息服务提供的文档:SDK使用手册。
环境要求
PHP 5.5+
安装
从Aliyun下载消息服务的PHP SDK
解压到项目目录,解压后的目录名是
php_sdk
。示例代码
引用消息服务SDK
require_once(dirname(__FILE__).'/php_sdk/mns-autoloader.php');
初始化消息服务
MNS对用户的每个区域都配置了一个单独的服务域名,规则是:https://${UserId}.mns.${Region}.aliyuncs.com 。示例代码使用的华东1区域(cn-hangzhou),也可以替换为其他区域,例如华北2区域(cn-beijing)。
use AliyunMNSClient;
use AliyunMNSExceptionMnsException;
$mns_client = new Client('https://'.$user_id.'.mns.cn-hangzhou.aliyuncs.com',
$access_key_id, $access_key_secret);
$queue = $mns_client->getQueueRef($queue_name);
接收消息
MNS接收到的每条消息都对应一个句柄,后续可以使用句柄操作这条消息(例如删除消息)。
另外,MNS支持批量接收消息来提高性能。参考MNS的文档批量消费消息。
接收消息时,可以指定超时时间(示例设置了3秒超时),如果队列中没有消息,会发生超时并触发异常。
$receipt_handle = NULL;
$message = null;
try
{
$res = $queue->receiveMessage(3);
echo "ReceiveMessage Succeed! n";
$message = $res->getMessageBody();
$receipt_handle = $res->getreceiptHandle();
}
catch (MnsException $e)
{
echo "ReceiveMessage Failed: " . $e . "n";
}
删除消息
消息不会主动从队列删除,必须显示调用删除消息,否则消息会一直保持在队列中,下次还会继续接收到同一个消息。
try
{
$res = $queue->deleteMessage($receipt_handle);
echo "DeleteMessage Succeed! n";
}
catch (MnsException $e)
{
echo "DeleteMessage Failed: " . $e . "n";
}
分析消息
消息体是字符串,内容是一个JSON对象,需要通过
json_decode
转换成对象,然后就可以分析JSON对象来获取详细信息了,示例打印了这次消息是哪个输出文件触发的媒体工作流执行。$json_message = json_decode($message);
$input_file = $json_message->{'MediaWorkflowExecution'}->{'Input'}->{'InputFile'};
echo '输入文件 location:'.$input_file->{'Location'}.
' bucket:'.$input_file->{'Bucket'}.
' object:'.$input_file->{'Object'}."n";
获取视频输出的详细信息
获取到消息详细内容后,可以配合使用点播服务API获取工作流执行的视频详细信息。示例打印出这次转码和截图作业的输出地址。
如何安装和配置点播服务的PHP SDK,参考文档媒体库SDK-PHP。
include_once 'aliyun-php-sdk-core/Config.php';
use MtsRequestV20140618 as Mts;
初始点播服务的client。
$profile = DefaultProfile::getProfile('cn-hangzhou',
$access_key_id,
$access_key_secret);
$mts_client = new DefaultAcsClient($profile);
打印所有转码作业的输出地址和基本信息。
if (strcmp($json_message->{'Type'}, 'Report') == 0) {
$activities = $json_message->{'MediaWorkflowExecution'}->{'ActivityList'};
$transcode_job_ids = Array();
for ($i=0; $i < count($activities); $i++) {
if (strcmp($activities[$i]->{'Type'}, 'Transcode') == 0) {
$transcode_job_ids[] = $activities[$i]->{'JobId'};
}
}
$request = new MtsQueryJobListRequest();
$request->setJobIds(join(',', $transcode_job_ids));
$request->setRegionId('cn-hangzhou');
$response = $mts_client->getAcsResponse($request);
for ($i=0; $i < count($response->{'JobList'}->{'Job'}); $i++) {
$output = $response->{'JobList'}->{'Job'}[$i]->{'Output'};
$output_file = $response->{'JobList'}->{'Job'}[$i]->{'Output'}->{'OutputFile'};
$video_properties = $response->{'JobList'}->{'Job'}[$i]->{'Output'}->{'Properties'};
echo '转码输出文件URL '.'https://'.$output_file->{'Bucket'}.'.'.
$output_file->{'Location'}.'.aliyuncs.com/'.
urldecode($output_file->{'Object'})."n";
echo '转码输出文件基本信息 '.$video_properties->{'Width'}.'x'.$video_properties->{'Height'}.
' duration:'.$video_properties->{'Duration'}."n";
}
}
打印所有截图作业的输出地址。
if (strcmp($json_message->{'Type'}, 'Report') == 0) {
$activities = $json_message->{'MediaWorkflowExecution'}->{'ActivityList'};
$snapshot_job_ids = Array();
for ($i=0; $i < count($activities); $i++) {
if (strcmp($activities[$i]->{'Type'}, 'Snapshot') == 0) {
$snapshot_job_ids[] = $activities[$i]->{'JobId'};
}
}
$request = new MtsQuerySnapshotJobListRequest();
$request->setSnapshotJobIds(join(',', $snapshot_job_ids));
$request->setRegionId('cn-hangzhou');
$response = $mts_client->getAcsResponse($request);
for ($i=0; $i < count($response->{'SnapshotJobList'}->{'SnapshotJob'}); $i++) {
$snapshot_config = $response->{'SnapshotJobList'}->{'SnapshotJob'}[$i]->{'SnapshotConfig'};
$output_file = $response->{'SnapshotJobList'}->{'SnapshotJob'}[$i]->{'SnapshotConfig'}->{'OutputFile'};
echo '截图输出文件URL '.'https://'.$output_file->{'Bucket'}.'.'.
$output_file->{'Location'}.'.aliyuncs.com/'.
urldecode($output_file->{'Object'})."n";
}
}
最后更新:2016-10-14 23:03:19
上一篇:
请求安全令牌-Java示例代码__上传视频文件_开发人员指南_视频点播-阿里云
下一篇:
主题通知方式接收消息__接收消息通知_开发人员指南_视频点播-阿里云
忘记密码怎么办,如何找回密码__账号登录_会员帐号及密码_会员账号&实名认证-阿里云
手动续费__购买实例_购买指南_云服务器 ECS-阿里云
AvailableResourcesType__数据类型_API 参考_云服务器 ECS-阿里云
查看慢日志列表__日志管理_API 参考_云数据库 RDS 版-阿里云
1.2 3步完成建表__1. RDS快速开始_数据库RDS 体验_体验馆-阿里云
ServiceParameterMap__数据类型_API_API 网关-阿里云
CDN访问异常时候,测试问题出现在CDN节点还是本地网络__故障检测_产品使用问题_CDN-阿里云
数据智能同步__使用手册_画像分析-阿里云
股票_阿里云帮助中心-阿里云,领先的云计算服务提供商
设计原则__SDK参考手册_数据集成-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云