更新时间:2025-02-21 gmt 08:00

使用dis发送obs事件通知-九游平台

本节介绍如何在obs控制台配置dis通知。

您可以新建dis通知规则,也可以从同区域的其他桶复制已有dis通知规则。

背景知识

obs提供的dis通知功能,主要面向大数据场景,要求obs与数据接入服务(dis)及其他大数据相关服务结合使用。

仅支持华东-上海一、华北-北京四、华南-广州区域。

当obs桶中触发了对象上传、下载、删除等操作事件时,obs将事件通知发送给dis,再通过dis通道将通知分发给下游的大数据处理服务,如数据湖工厂(dlf)。大数据处理服务接到通知后,利用委托的obs权限对obs中更新的数据进行实时分析处理。您可以将通知配置为按对象名称的前缀或后缀进行筛选。

假设在某大数据场景下,用户要求每隔5分钟对obs中上传的“.mp4”后缀的视频文件进行一次归类。用户可以在obs中创建一个dis通知规则,规定在将带有“.mp4”后缀的视频文件上传到obs桶时发送通知。一旦规则触发,obs会发送通知给dis,经dis通道分发给下游的dlf。在dlf中经过开发,可实现每5分钟汇总一次dis通知,并将这些通知中涉及的视频文件统一移动到obs某个文件夹下,再对其进行进一步的分析处理。

图1 dis通知示意图

约束与限制

  • 需要使用iam增加tenant administrator权限后才能设置、获取、删除dis通知策略。使用dis消息通知需要使用iam创建对obs云服务的委托,委托赋予的权限需为数据接入服务dis的dis user权限。
  • 一个桶中最多同时配置10条dis通知规则。
  • 新创建的dis通知将在5分钟之内生效。
  • 一个桶的多条dis通知规则不允许重复,即任意对象在发生任意事件时都不能同时匹配两条以上的dis通知规则,重复规则会创建失败。

    针对同一事件,如果配置了一条前后缀都为空的规则,则不允许再配置第二条规则。前后缀都为空表示对所有对象生效。

    例如:针对put事件,已存在一条规则a,定义的前缀是“abcd”,后缀是“.txt”。如果要创建另外一条针对put事件的规则b,则规则b配置不同前后缀的结果如表1所示。

    表1 规则b前后缀配置场景及结果

    规则a前后缀配置

    规则b前后缀配置

    规则b创建结果

    原因

    前缀:abcd

    后缀:.txt

    前缀:abcd

    后缀:.txt

    失败

    前后缀相同

    前缀:abcd

    后缀:空

    失败

    前缀相同,后缀b包含a

    前缀:ab

    后缀:xt

    失败

    前缀b包含a,后缀b包含a

    前缀:abef

    后缀:.txt

    成功

    前缀不同,后缀相同

    前缀:abcd

    后缀:.mp4

    成功

    前缀相同,后缀不同

事件通知消息结构

obs发布的事件通知消息是具有以下结构的json消息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"records":[
{
"eventversion":"",//版本号,目前为"3.0"
"eventsource":"",//消息源,固定为"obs"
"eventregion":"",//事件所在的region
"eventtime":"",//事件时间,格式为iso-8601,示例:2020-07-10t09:24:11.418z
"eventname":"",//触发事件通知的事件名
"useridentity":{
"id":""//触发事件的用户对应的计费id
},
"requestparameters":{
"sourceipaddress":""//请求的源ip
},
"responseelements":{
"x-obs-request-id":"",//请求对应的requestid
"x-obs-id-2":""//帮助定位问题的特殊符号
},
"obs":{
"version":"1.0",
"configurationid":"",//此事件匹配的obs中事件通知规则的名称
"bucket":{
"name":"examplebucket",
"owneridentity":{
"id":""//桶拥有者的账号id
},
"bucket":""//桶名
},
"object":{
"key":"",//对象名
"etag":"",//对象的etag
"size":,//对象的大小
"versionid":"null",//对象的版本id
"sequencer":""//确定某个特定对象事件顺序的标识
}
}
}
]
}

请注意以下几点:

  • 您可以通过“responseelements”键值来跟踪obs的请求。其中,“x-obs-request-id”和“x-obs-id-2”均可用于跟踪单个请求,这两个参数的值即obs响应请求时返回的值。
  • “obs”键值包含了事件中涉及的桶和对象的相关信息。其中,对象键名称进行了url编码,例如,“test/中 文.jpg”将变为“test/中 文/.jpg”。

    二次开发时,如果使用obs sdk下载此对象 ,则需要先对对象名进行url解码,再调用下载接口。而如果直接使用浏览器访问此对象,则不需要解码。

  • “sequencer”键值可以确定事件顺序。通常情况下,事件通知并非按照事件发生的顺序进行提示,但是创建对象(put)和删除对象(delete)的事件通知包含sequencer,该键值可帮助确定特定对象的事件顺序。比较同一对象键上的两个事件通知的十六进制sequencer字符串时,sequencer值越大,事件发生越晚。
    1. sequencer不能用于确定不同对象键上的事件顺序。
    2. sequencer确定的事件顺序仅供参考,该方法不适用于高可靠性系统。

消息示例:

  • 测试消息-当您在桶上配置事件通知时,obs会发送以下测试消息
    {  
       "service":"obs",
       "event":"testevent",
       "time":"1970-01-01t00:00:00.000z",
       "bucket":"examplebucketname",
       "requestid":"0002f4bcf6000001563b064b17b2094d",
       "hostid":"2zf b9ambabgnq ye8xu2j87dzabnxu4tamioctqpmkc2sa9ouf8tpb2sy5j3i4"
    }
  • 使用put请求创建对象时的示例消息-以下消息是obs发布的objectcreated:put事件的消息示例
    {  
        "records":[
            {
                "eventversion":"3.0",
                "eventsource":"obs",
                "eventregion":"cn-east-3",
                "eventtime":"2018-06-26t14:37:05.468z",
                "eventname":"objectcreated:put",
                "useridentity":{
                    "id":"71f3901173514e6988115ea2c26d1999"
                },
                "requestparameters":{
                    "sourceipaddress":"104.55.173.69"
                },
                "responseelements":{
                    "x-obs-request-id":"9006000001643c86d03c300be8860fa7",
                    "x-obs-id-2":"2 /ucr6uincjabuejwyq rhxkuf/k/9uoaxuewii/se9j4tu5lwaxttld1gvmv2o"
                },
                "obs":{
                    "version":"1.0",
                    "configurationid":"configurationid",
                    "bucket":{
                        "name":"examplebucket",
                        "owneridentity":{
                            "id":"b4bf1b36d9ca43d984fbcb9491b6fce9"
                        },
                        "bucket":"examplebucket"
                    },
                    "object":{
                        "key":"object0001.txt",
                        "etag":"3b9680702b9a12733c5490d1b15c7607",
                        "size":538,
                        "versionid":"null",
                        "sequencer":"000000001643c86d06576f5320000000"
                    }
                }
            }
        ]
    }

    由于潜在的internet问题或电子邮件传送限制,有时通知可能无法成功送达http或电子邮件终端节点。

前提条件

  • 已创建dis通道。创建通道的方法请参见。
  • 已创建iam委托,委托要求obs在dis通道所在项目拥有dis user权限。创建委托的方法请参见委托其他云服务管理资源

新建dis通知规则

obs支持通过控制台、api方式新建dis通知规则,不支持通过sdk、obs browser 、obsutil方式新建dis通知规则。

复制dis通知规则

obs支持通过控制台方式复制dis通知规则,不支持通过api、sdk、obs browser 、obsutil方式复制dis通知规则。

  1. obs左侧导航栏选择“桶列表”
  2. obs管理控制台桶列表中,单击待操作的桶,进入“对象”页面。
  3. 在左侧导航栏单击“基础配置>事件通知”,进入“dis通知”界面。
  4. 单击“复制”。
  5. 选择复制源,即dis通知规则所在的源桶。
    • 从源桶复制dis通知规则的操作为增量复制,不会删除当前桶已存在的dis通知规则,与已存在的dis通知规则冲突的规则不会复制。
    • 源桶和目标桶的桶版本号都必须是3.0。
    • 同源和目标桶必须在同一区域。
    • 您可以按需移除不需要复制的dis通知规则。
  6. 单击“确定”,将源桶的dis通知规则复制到当前桶。

相关操作

您可以单击待操作的dis通知后面的“编辑”,修改dis通知规则;单击“删除”,删除dis通知。

如果您要批量删除dis通知,选中待删除的dis通知,单击列表上方的“删除”,完成批量删除。

相关文档

网站地图