如何使用OSS事件通知功能?

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
文件存储 NAS,50GB 3个月
简介: 概述         图片内容分享平台、音视频平台如何及时的感知有新数据上传到OSS?如何及时感知相关内容发生了更新?如何及时感知重要文件被删除?如何知晓OSS上数据同步已经完成?OSS推出了“事件通知”功能,能够对大家所关心的OSS资源上的相关操作及时的进行消息通知。

        图片内容分享平台、音视频平台如何及时的感知有新数据上传到OSS?如何及时感知相关内容发生了更新?如何及时感知重要文件被删除?如何知晓OSS上数据同步已经完成?OSS推出了“事件通知”功能,能够对大家所关心的OSS资源上的相关操作及时的进行消息通知。

一、事件通知介绍

        OSS事件通知通知,是异步进行的,不影响正常的OSS操作,对原有的操作完全可以无感知。事件通知,包括“规则”和“通知”两部分。大家可以创建事件通知规则来描述什么情况下,需要OSS进行消息通知;而消息通知是基于阿里云消息服务MNS实现,提供多种通知方式(通过不同的订阅来实现的,具体可参考: here)。其整体架构如下:
7a0fb73d166ed9cbf3b2f5be0e63777ff6be31d2
        事件通知规则从下述3个维度进行了描述:
  1. 资源描述
  2. 事件类型
  3. 接收消息的终端

1. 资源描述

        这个维度描述了哪些资源上的产生事件需要进行消息通知。OSS的资源分为Bucket和Object,比如想针对Bucket:nightbucket,设置一些规则,则可以通过OSS控制台来直接创建。进入控制台( here)->选中Bucket->选中左侧Bueckt属性->选中右侧事件通知,如下就来到事件通知规则管理页面了:
ad8c2d12019ea485364ef39b8505c7b040447912
        点击“创建规则”,其中可以添加资源描述,如下所示:
665bb4dc984a6b607568d9f6004cb2742ecc1e5a
        上述添加的资源描述分为两种类型:“全名”和“前后缀”。“全名”是能精确描述到某个一个Object;而大多数时候,关注一个Bucket中的全部或者部分Object时,都是需要使用前后缀来完成的,比如:
  • 关注Bucket:nightbucket 中所有的文件,则选择“前后缀”模式,然后前缀、后缀都不填即可
  • 关注Bucekt:nightbucket 中目录movie下所有文件,则选择“前后缀”模式,前缀填“moive/”、后缀不填即可
  • 关注Bueckt:nightbucket 中所有的.jpg的图片,则选择“前后缀”模式,前缀不填、后缀填“.jpg”即可
  • 关注Bueckt:nightbucket 中目录movie下的.mp3格式的影片,则选择前缀填“moive/”、后缀填“.mp3”即可

2. 事件类型

        这个维度描述了大家关注的资源上产生哪些事件需要进行消息通知。这些事件类型分别对应OSS资源的不同操作,包括上传、修改、删除、同步等等操作,具体的类型如下所示:
ObjectCreated(创建/覆盖文件) ObjectCreated:PutObject
ObjectCreated:PostObject
ObjectCreated:CopyObject
ObjectCreated:InitiateMultipartUpload
ObjectCreated:UploadPart
ObjectCreated:UploadPartCopy
ObjectCreated:CompleteMultipartUpload
ObjectCreated:AppendObject
ObjectDownloaded(下载文件) ObjectDownloaded:GetObject
ObjectRemoved(删除文件) ObjectRemoved:DeleteObject
ObjectRemoved:DeleteObjects
ObjectReplication(文件同步) ObjectReplication:ObjectCreated
  ObjectReplication:ObjectRemoved
ObjectReplication:ObjectModified
        大家可以根据各自的业务需要各自的业务需要,在事件类型维度上选择某个或者多个事件。一些典型的用法有:
  • 关注某个重要文件的下载次数,可以关注该文件的ObjectDownloaded:GetObject事件
  • 关注某些重要文件什么时候被删除了,可以关注该类文件的ObjectRemoved下所有的时间
  • 关注某类新文件的产生,或者更新,可以关注该类文件的ObjectCreated下所有的事件(可以根据各自的实现进行筛选)
  • 关注某类文件什么时候同步完成,可以关注ObjectReplication下所有的时间(可以进一步进行细分)

3. 接收终端

        OSS事件通知功能在某个操作匹配了规则之后,会生成相关消息描述,并将该消息发布到MNS的Topic中的,然后根据该Topic上的订阅,将消息推送到具体的接收终端上的。在创建规则时,可以指定接收终端,如下所示:
a73a18bfa8b35b98da6fd8001479caa14df68a6e
        如上图所示,可以添加多个终端,终端类型包括:Http地址、队列以及主题。其中,“主题”功能目前控制台会尽快开放,可以通过直接指定主题,让OSS将事件通知消息发送到该主题中,再通过在该Topic上创建订阅的方式,将消息推送到具体的接收端中(包括HttpServer、队列,以及短信、邮件、移动推送等等)。目前,控制台支持在创建规则时直接指定多个接收终端(包括:Http类型以及队列类型),后端默认自动创建主题以及相应的订阅。对于如何处理MNS的Http推送消息以及从队列中消费消息,请参考: here

二、事件通知消息内容

        OSS的事件通知消息内容是经过Base64编码的,解码后是Json格式,具体内容如下:

{"events": [{
    "eventName": "",  //事件通知类型
    "eventSource": "", //消息源,固定为"acs:oss"
    "eventTime": "", //事件事件,格式为ISO-8601
    "eventVersion": "", //版本号,目前为"1.0"
    "oss": {
        "bucket": {
            "arn": "", //bucket的唯一标识符,格式为"acs:oss:region:uid:bucket"
            "name": "", //bucket名称
            "ownerIdentity": ""}, //bucket的owner
        "object": {
            "deltaSize": , //object大小的变化量,比如新增一个文件,这个值就是文件大小,如果是覆盖一个文件,这个值就是新文件与旧文件的差值,因此可能为负数
            "eTag": "", //object的etag,与GetObject()请求返回的ETag头的内容相同
            "key": "", //object名称
            "position":, //可变项,只有在ObjectCreated:AppendObject事件中才有,表示此次请求开始append的位置,注意是从0开始
            "readFrom": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件开始读取的位置,如果不是Range请求,则此项为0,否则则是Range请求的开始字节,注意是从0开始
            "readTo": , //可变项,只有在ObjectDownloaded:GetObject事件中才有,表示文件最后读取的位置,如果不是Range请求,则此项为文件的大小,否则则是Range请求的结束字节增1
            "size": }, //object大小
        "ossSchemaVersion": "", //此字段域的版本号,目前为"1.0"
        "ruleId": "GetObject"}, //此事件匹配的规则ID
        "region": "", //bucket所在的region
        "requestParameters": {
            "sourceIPAddress": ""}, //请求的源IP
        "responseElements": {
            "requestId": ""}, //请求对应的requestid
        "userIdentity": {
            "principalId": ""}, //请求发起者的uid
        "xVars": {  //oss的callback功能中的自定义参数
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"}}]}
        示例:

{"events": [{
    "eventName": "ObjectDownloaded:GetObject",
    "eventSource": "acs:oss",
    "eventTime": "2016-07-01T11:17:30.000Z",
    "eventVersion": "1.0",
    "oss": {
        "bucket": {
            "arn": "acs:oss:cn-shenzhen:1148930107246818:event-notification-test-shenzhen",
            "name": "event-notification-test-shenzhen",
            "ownerIdentity": "1148930107246818"},
        "object": {
            "deltaSize": 0,
            "eTag": "0CC175B9C0F1B6A831C399E269772661",
            "key": "test",
            "readFrom": 0,
            "readTo": 1,
            "size": 1},
        "ossSchemaVersion": "1.0",
        "ruleId": "GetObjectRule"},
        "region": "cn-shenzhen",
        "requestParameters": {
            "sourceIPAddress": "140.205.128.90"},
        "responseElements": {
            "requestId": "5776514AF09A9E6542425D2B"},
        "userIdentity": {
            "principalId": "1148930107246818"},
        "xVars": {
            "x:callback-var1":"value1",
            "x:vallback-var2":"value2"}}]}

        关于事件通知更多信息,请参考: here






























相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
6月前
|
存储 Java 对象存储
springboot配置阿里云OSS存储实现文件上传下载功能
【1月更文挑战第1天】springboot配置阿里云OSS存储实现文件上传下载功能
2164 2
|
对象存储 开发者
对象OSS生命周期(LifeCycle)管理功能|学习笔记
快速学习对象 OSS 生命周期(LifeCycle)管理功能
2619 0
对象OSS生命周期(LifeCycle)管理功能|学习笔记
|
存储 前端开发 Java
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
普通上传方式通过InputStream作为OSS文件的数据源。用户(浏览器)把文件交给我们自已的服务器,再由服务器携带相关验证信息上传文件至阿里云,这种方式每上传一次,文件就会经过一次我们自已的服务器(占用大量带宽),我们的服务器也会在大量的用户下带来瓶颈。影响服务器处理别的请求,大大降低了效率。
3835 0
四步解决!OSS对象存储文件上传功能(服务端签名后直传,建议收藏)
|
2月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
154 9
|
5月前
|
存储 Java Maven
大事件后端项目31--------文件上传_阿里云OSS_入门程序
大事件后端项目31--------文件上传_阿里云OSS_入门程序
|
5月前
|
存储 运维 Java
大事件后端项目30------文件上传_阿里云OSS_准备工作
大事件后端项目30------文件上传_阿里云OSS_准备工作
|
5月前
|
对象存储
大事件后端项目32--------文件上传_阿里云OSS_程序集成
大事件后端项目32--------文件上传_阿里云OSS_程序集成
|
5月前
|
运维 Serverless 数据处理
函数计算产品使用问题之OSS触发器是否只支持事件处理函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
存储 分布式计算 关系型数据库
实时数仓 Hologres产品使用合集之是否提供相应的功能接口和指令,可以将数据从OSS存储同步到Hologres中进行分析
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
6月前
|
存储 对象存储 Python
Python中使用阿里云OSS存储实现文件上传和下载功能
Python中使用阿里云OSS存储实现文件上传和下载功能
1759 2

相关产品

  • 对象存储
  • 下一篇
    无影云桌面