开发者社区 问答 正文

消息服务的Notification如何操作?



Http Endpoint



描述


MNS 通过发送 POST 请求将 Notifications 推送到 Endpoint 端,Notifications 格式支持两种:XML 完整格式和 SIMPLIFIED 精简格式。XML 完整格式会在 Request Body 中包含推送消息的正文和消息的 Meta 信息;SIMPLIFIED 精简格式的 Request Body 即为用户的消息正文,不做任何改动,MessageId 会在 Request Header 中传递给用户。


Request


Request 的构造由以下几个部分组成:

  • 请求行

    POST /notifications HTTP/1.1默认是 /notifications,如果订阅者在创建 Subscription 时指定的 Endpoint 包含 URI,会使用用户设置的 URI 替换 /notifications

  • 特有 URI 参数


  • 特有 Request Header
参数名称说明备注
Authorization此次推送请求的签名XML 和 SIMPLIFIED格式下均有
x-mns-signing-cert-url签名证书的地址(Base64编码过)XML 和 SIMPLIFIED格式下均有
x-mns-request-id此次推送消息的 Request 编号XML 和 SIMPLIFIED格式下均有
x-mns-message-id此次推送消息的 MessageIdSIMPLIFIED格式下有
x-mns-message-tag此次推送消息的消息标签SIMPLIFIED格式下有
  • Request Body

    XML 格式下,Request Body 为 XML 格式,包含消息正文和 Meta 信息。
参数名称说明
TopicOwner被订阅主题的拥有者
TopicName被订阅主题的名称
Subscriber订阅者
SubscriptionName订阅名称
MessageId消息编号
Message消息正文
MessageMD5消息的 MD5 值
MessageTag消息标签(用于消息过滤)
PublishTime消息的发布时间,从 1970-1-1 00:00:00 000 到消息发布时的毫秒值
SigningCertURL 签名证书的地址(仅XML格式有,注:不建议使用,仅为兼容内测用户,2016年7月份已经不再支持)

精简格式下,Request Body 为发布者发布的消息正文。


Response


返回消息由返回状态行、HTTP头和消息体三部分组成

  • HTTP Status Code

    HTTP/1.1 204 No Content正常处理通知消息,返回 204;请求签名验证不通过,返回 403;其他任何错误,返回 500。

  • 特有 Response Header


  • Response Body


[backcolor=transparent]请求示例:
[backcolor=transparent]XML 格式
[backcolor=transparent]

[backcolor=transparent]

展开
收起
轩墨 2017-10-24 15:46:14 2126 分享 版权
阿里云 AI 助理回答

在阿里云的Message Service(MNS)中,HTTP Endpoint是一种接收和处理来自MNS消息通知的方式。当您在MNS中创建一个Subscription时,可以选择将其绑定到一个HTTP Endpoint,这样每当有新消息发布到相应的Topic时,MNS就会通过HTTP POST请求将这些消息推送到指定的Endpoint。

请求结构解析

请求行

  • POST /notifications HTTP/1.1:这是标准的HTTP请求格式,表示使用POST方法向/notifications路径发送HTTP/1.1版本的请求。如果在创建Subscription时自定义了包含URI的Endpoint,则该路径会被替换为用户设置的URI。

特有Request Header

  • Authorization:此头部包含了对推送请求进行签名的信息,确保请求的安全性。
  • x-mns-signing-cert-url:提供签名证书的Base64编码地址,用于验证请求的来源。
  • x-mns-request-id:此次推送消息的唯一请求编号。
  • x-mns-message-id:仅SIMPLIFIED格式下有,表示推送消息的MessageId。
  • x-mns-message-tag:仅SIMPLIFIED格式下有,与消息标签相关,用于消息过滤。

Request Body

  • XML格式:包含消息正文及元信息,如TopicOwner、TopicName等,适用于需要更多上下文信息的场景。
  • SIMPLIFIED格式:Request Body直接包含发布者发布的消息正文,无额外的XML包装,适合追求简单快速处理的场景。

响应结构

  • HTTP Status Code:正常处理返回204 No Content,签名验证失败返回403 Forbidden,其他错误返回500 Internal Server Error。
  • Response Body:对于处理推送通知的HTTP Endpoint而言,无需返回具体内容,因此响应体为空。

示例

虽然示例代码未直接给出,但根据上述描述,一个简单的处理流程如下:

假设您的服务端(HTTP Endpoint)用Python编写,可以使用Flask或Django等框架来接收并处理这样的POST请求:

from flask import Flask, request

app = Flask(__name__)

@app.route('/your_custom_endpoint', methods=['POST'])
def handle_notification():
    # 验证请求签名(此处简化处理,实际应用需实现详细验证逻辑)
    if not validate_signature(request.headers):  # 实现validate_signature函数以验证Authorization头
        return "Unauthorized", 403
    
    message_id = request.headers.get('x-mns-message-id')
    message_body = request.data.decode('utf-8')  # SIMPLIFIED格式下直接从请求体获取消息正文
    
    # 处理消息逻辑...
    print(f"Received message with ID: {message_id}, content: {message_body}")
    
    # 返回204表明成功处理
    return "", 204

if __name__ == '__main__':
    app.run()

请根据实际需求调整验证签名的方法和消息处理逻辑。记得在部署前配置好相应的路由和安全措施,确保系统能够安全有效地处理来自MNS的通知。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答