全部产品
云市场

获取工作流通知消息实例

更新时间:2019-03-18 11:28:40

1. 问题场景

MTS触发转码,用户业务端需要自动化实现如下过程:客户端上传视频,触发MTS转码,获取转码任务结束通知,调用相关MTS接口获取转码结果链接,将对应的链接发布到业务端进行应用;其中获取转码任务结束通知可以通过配置工作流中的消息通知或者队列实现。如何应用工作流:工作流通知配置——》获取通知消息——》解析通知消息,获取转码结果——》业务应用转码结果。

2. 解决方案

2.1工作流消息通知配置

在控制台—》媒体转码—》媒体库设置—》工作流—》设置工作流配置通知,通知创建可参考【通知创建】;12

配置成功后,在媒体库上传资源或者采用其他方式上传资源到工作流的输入bucket的输入路径下,就会触发消息服务的通知。

注意事项:

  • 配置的通知必须选择与工作流相同区域的通知才可以;

2.2获取通知消息

用户可以通过代码获取通知消息,MNS 通过发送 POST 请求将 Notifications 推送到 Endpoint 端,Notifications 格式支持两种:XML 完整格式和 SIMPLIFIED 精简格式;用户正常处理通知需程序端接收到通知后,响应204状态码,如果未响应204状态码,对应的通知会重发。

php 获取通知示例如下:

  1. <?php
  2. //接收传送的数据
  3. $fileContent = file_get_contents("php://input");
  4. $fp = fopen('/data/mts/1.txt', 'a+');
  5. fwrite($fp, $fileContent);
  6. fwrite($fp, '\r\n');
  7. fclose($fp);
  8. //响应204状态码
  9. http_response_code(204);
  10. ?>

进阶示例:验证对应通知是否是源自消息服务,并接收通知,参考:HTTP的消息接收服务 Java 实现示例

2.3 解析通知消息

MTS通知的基本结构由两部分构成:消息服务结构体及消息正文;其中消息正文是MTS服务的消息结构体。具体请参考如下示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Notification xmlns="http://mns.aliyuncs.com/doc/v1/">
  3. <TopicOwner>topicowner</TopicOwner>
  4. <TopicName>DBtest</TopicName>
  5. <Subscriber>subscriber</Subscriber>
  6. <SubscriptionName>dctest</SubscriptionName>
  7. <MessageId>63F5B22A460AE417-1-159CB2EB8BC-200000003</MessageId>
  8. <MessageMD5>07C9BDAF7FF4EF307C523812565556AF</MessageMD5>
  9. <Message>{"RunId":"9c897328fb084b089bb73e21fdba16f3","Name":"activityStart","Type":"Start","State":"Success","MediaWorkflowExecution":{"MediaWorkflowId":"8e24e391e3fe4887b236668368189e74","Name":"新建工作流_1481600805788","RunId":"9c897328fb084b089bb73e21fdba16f3","MediaId":"4a4e965cb652413a91060be2706ddfbe","Input":{"InputFile":{"Bucket":"hzaaa","Location":"oss-cn-hangzhou","Object":"m3u8SegementIn72/1.mp4"}},"State":"Running","ActivityList":[{"RunId":"9c897328fb084b089bb73e21fdba16f3","Name":"activityStart","Type":"Start","State":"Success","StartTime":"2017-01-23T11:55:53Z","EndTime":"2017-01-23T11:55:53Z"}],"CreationTime":"2017-01-23T11:55:53Z"}}</Message>
  10. <PublishTime>1485172553916</PublishTime>
  11. <SigningCertURL>https://mnstest.oss-cn-hangzhou.aliyuncs.com/x509_public_certificate.pem</SigningCertURL>
  12. </Notification>

其中:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Notification xmlns="http://mns.aliyuncs.com/doc/v1/">
  3. <TopicOwner>topicowner</TopicOwner>
  4. <TopicName>DBtest</TopicName>
  5. <Subscriber>subscriber</Subscriber>
  6. <SubscriptionName>dctest</SubscriptionName>
  7. <MessageId>63F5B22A460AE417-1-159CB2EB8BC-200000003</MessageId>
  8. <MessageMD5>07C9BDAF7FF4EF307C523812565556AF</MessageMD5>

该部分内容是消息服务结构体,消息服务结构体各个标签含义看【标签含义】。

  1. <Message>{"RunId":"9c897328fb084b089bb73e21fdba16f3","Name":"activityStart","Type":"Start","State":"Success","MediaWorkflowExecution":{"MediaWorkflowId":"8e24e391e3fe4887b236668368189e74","Name":"新建工作流_1481600805788","RunId":"9c897328fb084b089bb73e21fdba16f3","MediaId":"4a4e965cb652413a91060be2706ddfbe","Input":{"InputFile":{"Bucket":"hzaaa","Location":"oss-cn-hangzhou","Object":"m3u8SegementIn72/1.mp4"}},"State":"Running","ActivityList":[{"RunId":"9c897328fb084b089bb73e21fdba16f3","Name":"activityStart","Type":"Start","State":"Success","StartTime":"2017-01-23T11:55:53Z","EndTime":"2017-01-23T11:55:53Z"}],"CreationTime":"2017-01-23T11:55:53Z"}}</Message>

Message标签中的内容是MTS消息结构体,用户可以根据message中的内容解析得到输入文件URL(根据”Input”标签内容拼接得到),实例ID(”RunId”)等;用户可以调用MTSAPI接口,根据输入URL查询得到媒体转码结果,由于可能存在同名文件上传的场景,导致相同的URL触发了多次工作流任务,一个工作流可以配置多个转码截图任务,所以一个媒体转码结果可能包含多个实例的执行结果,用户可以根据通知消息中的实例ID定位到该次转码任务结果;

Message常见字段含义看下表:

3

Message中其他字段的含义看【字段含义

注意事项:

  • Message中的”Type”:”Start”表示开始转码,”Type”:”Report”表示转码结束;