激活媒体处理消息通知功能。
启用媒体处理消息通知功能步骤
激活媒体处理消息通知功能。
媒体处理通过MNS实现转码作业及模板分析作业结束时的消息通知功能,因此激活此功能请先开通轻量消息队列(原MNS) 服务。
创建MNS通知主题。
登录轻量消息队列(原MNS) 控制台(选择与媒体处理服务相同地域)> 发布订阅 > 创建主题以创建消息主题;然后在主题的订阅详情中设定订阅消息的HTTP地址;
详情参见:主题操作。
订阅消息的HTTP地址
HTTP地址仅指定域名或IP地址(可设定自定义Web服务端口),实际消息推送至 Web服务的 /notifications 。
取消接收消息的HTTP地址强制为 “Web服务的 /notifications路径”的限制,支持用户自行设定接收消息的Web服务的路径。
在转码管道上绑定消息主题。
登录 媒体处理控制台> 全局设置> 管道与回调,在管道上关联消息通知主题。
消息通知功能接收轻量消息队列(原 MNS)搭建
MNS通过发送POST请求将消息推送到指定接收消息的HTTP地址。
消息推送请求格式。
Request的构造主要由以下几个部分组成:
请求行
POST /notifications HTTP/1.1
URI参数
无
Request Header
参数名称
说明
备注
Authorization
验证字符串,可由此判断跟请求是否是由MNS发出。
Content-Length
HTTP消息体的长度。
Content-Type
请求内容的MIME类型,目前请求仅支持text/xml;charset=utf-8格式。
Content-MD5
HTTP消息体的MD5值。
Date
请求的构造时间,目前只支持GMT格式,如果和MNS的服务器时间前后差异超过15分钟将返回本次请求非法。
Host
接收消息的HTTP服务端的域名。
HTTP/1.1
x-mns-request-id
此次推送的Request编号。
x-mns-version
调用MNS接口的版本号,当前版本为“2015-06-06”。
x-mns-signing-cert-url
签名证书的地址(Base64编码过)。
签名证书的地址;Request Body 中的SigningCertURL字段在2016年6月30日后将不再提供。
Request Body
Request Body为XML格式,包括创建消息正文和属性。
参数名称
说明
TopicOwner
被订阅主题的拥有者。
TopicName
被订阅主题的名字。
Subscriber
订阅者。
SubscriptionName
订阅名称。
MessageId
消息编号。
Message
消息正文。
MessageMD5
消息的MD5。
MessagePublishTime
消息发布的时间。
SigningCertURL
签名证书的地址,2016年6月30日后将仅在Request Header中通过x-mns-signing-cert-url提供。
Response
返回消息由返回状态行,HTTP头和消息体三部分组成
HTTP Status Code
HTTP/1.1 204 NoContent
若确认成功,返回204。
若请求签名认证不过,返回403。
若任何其他错误,返回500。
Response Header
无
Response Body
无
Special Error
无
请求示例:
POST /notifications HTTP/1.1 Host: example.com Date: Wed, 08 Mar 2012 12:00:00 GMT Content-Length: 300 Content-Type: text/xml;charset=utf-8 Content-MD5: YjJjYzgxYzkxODU4NDI0ODJiYTVlNjQ4MmM0MjZiYjY= Authorization:MNS 44CF9590006BF252F707:jZNOcbfWmD/A/f3hSvVzXZjM2HU= User-Agent: Aliyun Notification Service Agent x-mns-request-id:512B2A634403E52B1956133K x-mns-version:2015-06-06 $TopicOwner $TopicName $Subscriber $SubscriptionName $MessageId $Message $MessageMD5 $MessagePublishTime http://ns.aliyun-inc.com/NS-f3ecfb7296de52f.pem
媒体处理消息通知消息体 > Message 结构说明:
参数名称
说明
jobId
作业ID。
type
作业类型,值为Transcode、Analysis、Snapshot。
state
作业状态,值为Success、Fail。
code
错误码。
msg
错误信息详情。
消息示例:
POST /notifications HTTP/1.1 Authorization: dOcgxcXsDU3m6SUHCW/5Ft4yRbzVjrMbhbcQiHeXIg5iLRnI//YhPVvzUY3wTnXikafxnn+UrEC+/vX0FwKnLg== Content-Length: 643 Content-md5: NjJhMzY0MGM2Y2YxY2RkOTdhZDdlMjUwMjc4MzBiOTY= Content-Type: text/xml;charset=utf-8 Date: Tue, 22 Sep 2015 03:25:32 GMT Host: internal.mns.cn-hangzhou.aliyuncs.com:8068 User-Agent: Aliyun Notification Service Agent x-mns-request-id: 5600CA2B372829080600**** x-mns-version: 2015-06-06 40000 mts-test 44404 mts-user-notify 52DD3925C2AA589F-1-14FF315BB69-200000003 928EC0A38F2D6BAA0767C0917C1C1C89 {“jobId”:”8a8753a54e6a4a0f9128ccecbefe****”,”state”:”Success”,”type”:”Transcode”} 1442892331881 http://mnstest.oss-cn-hangzhou.aliyuncs.com/x509_public_certificate.pem
返回头示例:
HTTP/1.1 204 NoContent
接收轻量消息队列(原 MNS)端对消息推送请求的签名认证。
HTTP的消息接收地址,用户可以通过SigningCerURL获取签名证书(推送消息的请求中都会携带),并根据相应的方法来验证该请求是否由MNS系统发出,防止恶意请求对用户造成负面影响。
SigningCerURL:描述了用户提取验证请求是否来自MNS的签名证书的地址。
HTTP的消息接收地址对应的HTTP Server对请求的合法性进行验证的方法如下:在请求的Header中,Authorization字段的值是MNS根据待签名字符串,用SHA1-RSA签名算法生成签名。用户可以使用公钥对签名进行验证。具体的验证方法如下。
获取X509证书。
在MNS发送给消息接收地址对应的HTTP Server的XML格式的Request Body中,SigningCertURL指定了签名证书的地址。用户需要获取该签名文件,从中提取出签名的公钥。
计算待签名字符串。
VERB + “\n”
+ CONTENT-MD5 + “\n”
+ CONTENT-TYPE + “\n”
+ DATE + “\n”
+ CanonicalizedMNSHeaders
+ CanonicalizedResource
VERB表示HTTP的Method。
Content-Md5表示请求内容数据的MD5值。
CONTENT-TYPE表示请求内容的类型。
DATE表示此次操作的时间,不能为空,目前只支持GMT格式,如果请求时间和MNS服务器时间相差超过15分钟,MNS会判定此请求不合法,返回400。
CanonicalizedMNSHeaders表示HTTP中的x-mns-开始的字段组合。
CanonicalizedResource表示HTTP请求的相对地址,不能为空。
采用SHA1算法对待签名字符串进行哈希。请按照RFC3447中的SHA1算法对待签名字符串做哈希运算。
解码。
对Authorization签名字段Base64解码。Authorization签名字段采用Base64编码方式进行编码,在对比签名前,需要对其进行Base64解码。
用公钥对Authorization签名进行解码。Authorization签名经过Base64 Decode后,再用从X509证书中提取的公钥对其进行解密。
比较第二、三两步的结果是否一致。如果一致,则表明请求来自MNS,访问合法。
其他:
用来签名的字符串为utf-8格式。
签名的方法用 RFC 3447中定义的sha1WithRSAEncryption方法。
base64是指使用base64算法转码文本。