消息通知功能说明

激活媒体处理消息通知功能。

启用媒体处理消息通知功能步骤

  1. 激活媒体处理消息通知功能。

    媒体处理通过MNS实现转码作业及模板分析作业结束时的消息通知功能,因此激活此功能请先开通轻量消息队列(原MNS) 服务

  2. 创建MNS通知主题。

    登录轻量消息队列(原MNS) 控制台(选择与媒体处理服务相同地域)> 发布订阅 > 创建主题以创建消息主题;然后在主题的订阅详情中设定订阅消息的HTTP地址;

    详情参见:主题操作

    订阅消息的HTTP地址

    HTTP地址仅指定域名或IP地址(可设定自定义Web服务端口),实际消息推送至 Web服务的 /notifications 。

    取消接收消息的HTTP地址强制为 “Web服务的 /notifications路径”的限制,支持用户自行设定接收消息的Web服务的路径

  3. 在转码管道上绑定消息主题。

    登录 媒体处理控制台全局设置管道与回调,在管道上关联消息通知主题。

消息通知功能接收轻量消息队列(原 MNS)搭建

MNS通过发送POST请求将消息推送到指定接收消息的HTTP地址。

  1. 消息推送请求格式。

    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

  2. 接收轻量消息队列(原 MNS)端对消息推送请求的签名认证。

    HTTP的消息接收地址,用户可以通过SigningCerURL获取签名证书(推送消息的请求中都会携带),并根据相应的方法来验证该请求是否由MNS系统发出,防止恶意请求对用户造成负面影响。

    SigningCerURL:描述了用户提取验证请求是否来自MNS的签名证书的地址。

    HTTP的消息接收地址对应的HTTP Server对请求的合法性进行验证的方法如下:在请求的Header中,Authorization字段的值是MNS根据待签名字符串,用SHA1-RSA签名算法生成签名。用户可以使用公钥对签名进行验证。具体的验证方法如下。

    1. 获取X509证书。

      在MNS发送给消息接收地址对应的HTTP Server的XML格式的Request Body中,SigningCertURL指定了签名证书的地址。用户需要获取该签名文件,从中提取出签名的公钥。

    2. 计算待签名字符串。

      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算法对待签名字符串做哈希运算。

    3. 解码。

      • 对Authorization签名字段Base64解码。Authorization签名字段采用Base64编码方式进行编码,在对比签名前,需要对其进行Base64解码。

      • 用公钥对Authorization签名进行解码。Authorization签名经过Base64 Decode后,再用从X509证书中提取的公钥对其进行解密。

    4. 比较第二、三两步的结果是否一致。如果一致,则表明请求来自MNS,访问合法。

    其他:

    • 用来签名的字符串为utf-8格式。

    • 签名的方法用 RFC 3447中定义的sha1WithRSAEncryption方法。

    • base64是指使用base64算法转码文本。