685
阿里云
事件通知__开发人员指南_消息服务-阿里云
MNS 推出重磅功能,支持阿里云各大服务通过MNS实现事件通知(回调)。用户可以通过在MNS上创建事件通知的规则,来关注其他阿里云产品指定资源上产生的事件,并且由MNS以消息的方式主动推送到指定的接收端。
- 事件通知按区域提供服务
- 事件通知为异步通知,不会影响用户使用其他云产品的体验
- 事件通知消息在有效时间内不会丢失,当用户接收消息失败时,会按照指定的重试策略重试
- 事件通知消息的接收端目前支持HttpServer和Queue(可以将消息转移到Queue中,由用户来主动消费)
- 事件通知中消息推送的相关介绍请参考主题模型
注意事项
- 事件通知规则创建完,约10分钟后生效
- 在没有其他规则的情况下,默认规则匹配所有资源上的所有事件
- 在有其他规则并且也有默认规则的情况下,不匹配其他规则的事件会匹配默认规则
- 事件通知规则只能创建和删除,目前不支持更新
作用
- 如果您授权其他人可以对您的资源(Bucket)进行某些操作,而您又希望关注这些操作的话,您就可以创建对应的规则,使得这些操作发生时,能够主动通知到您。
- 如果您需要对操作进行统计的话,也可以通过事件通知的方式进行数据分析,查看一段时间内某个操作发生的次数,据此来分析您的业务最近有什么样的发展趋势。并且,您也可以将这些事件通知的消息继续导入其他服务(比如:EMR,进一步进行您自定义的分析)
- 您也可以通过事件通知监控您的资源上发生的某些操作的QPS等等指标。
OSS事件通知
OSS 支持将相关操作产生的事件通知到指定的接收端。其中:
- 失败的操作目前不会触发事件通知
- 同步产生的操作不会触发事件通知
- Lifecycle产生的操作会触发事件通知
- 镜像回写会触发两个事件:ObjectDownloaded:GetObject(由于文件还未拉取,因此etag等信息为空)和ObjectCreated:PutObject。
- OSS 事件通知还支持用户自定义参数,会在消息中将用户的合法自定义参数放在xVars字段中(自定义参数方法与 OSS 的 Callback 保持一致,可参考:这里)。
1. OSS请求返回值
在请求 OSS 进行相关操作时,事件通知不会影响原定接口的返回值,是通过在返回的Response中增加Header来描述触发事件通知的结果的。如果没有匹配事件通知的规则,则不会增加Header;如果匹配到了,不管事件通知是否触发成功,都会增加这个Header。Header格式如下:
- key: x-oss-process-status
- value:经过Base64编码,解码后为:
{
"code": "Success", //此次触发事件通知的结果,如果成功,则为Success,否则为Fail,需要注意的是,Success只表示oss将消息发送到了topic中,并不代表topic将消息推送到了endpoint那里
"message": "NotificationSucceed", //此次操作的详细描述,如果失败,此处会说明失败的原因
"type": "EventNotification", //操作类型,事件通知统一为"EventNotification",判断的时候需要先判断此类型
"version": "1.0"} //版本号
示例:
x-oss-process-status: 'ewogICAgImNvZGUiOiAiU3VjY2VzcyIsCiAgICAibWVzc2FnZSI6ICJOb3RpZmljYXRpb25TdWNjZWVkIiwKICAgICJ0eXBlIjogIkV2ZW50Tm90aWZpY2F0aW9
2. 举例说明如何使用OSS事件通知
某个用户创建了一个Bucket:event-notification-test,然后他关心有哪些Object被上传到这个Bucket中了,于是他就可以创建下面这样的事件通知规则:
- 规则名称:event-notification-test-rule
- 资源描述:event-notification-test/
- 事件类型:PutObject、PostObject
- 接收终端:event-notification-test-queue
以此为例,五步玩转OSS事件通知,请参考:这里
默认规则
如果用户简单的想关注自己所有Bucket上产生的所有事件,可以简单的创建一条默认规则就可以了,即,默认事件通知,请参考:这里
注意:
- 如果仅有默认规则,则默认规则会匹配所有Bucket上产生的所有事件,但一旦创建了其他规则后,默认规则的语义就变成了:不匹配其他规则的情况下产生的事件通知才会匹配默认规则
3. OSS事件类型
OSS支持的事件类型包括:
注:请求失败时,目前是不会触发事件通知的。
事件名称 | 说明 |
---|---|
ObjectCreated:PutObject | |
ObjectCreated:PostObject | |
ObjectCreated:CopyObject | |
ObjectCreated:InitiateMultipartUpload | |
ObjectCreated:UploadPart | |
ObjectCreated:UploadPartCopy | |
ObjectCreated:CompleteMultipartUpload | |
ObjectCreate:AppendObject | |
ObjectDownload:GetObject | |
ObjectRemove:DeleteObject | |
ObjectRemove:DeleteObjects | |
ObjectRemoved:AbortMultipartUpload |
4. OSS事件通知消息格式
- 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"}}]}
最后更新:2016-11-23 16:04:14
上一篇:
主题操作__主题模型_开发人员指南_消息服务-阿里云
下一篇:
日志管理__开发人员指南_消息服务-阿里云
步骤2:https网站接入__快速入门(网站业务)_DDoS 高防IP-阿里云
通过StreamCompute消费__loghub-消费_用户指南_日志服务-阿里云
短信签名的要求是什么?__常见问题_短信服务-阿里云
推送Android SDK打开App或指定Activity时如何获取推送通知参数?__Android SDK常见问题_移动推送-阿里云
物理专线__产品使用手册_高速通道-阿里云
Oracle数据源配置__数据源配置_数据同步手册_用户操作指南_大数据开发套件-阿里云
阿里云发布弹性高性能计算平台E-HPC 中国首款公共云HPCaaS
LogicalOperator__DataType_API 参考_表格存储-阿里云
动作列表__RAM子用户访问_API-Reference_日志服务-阿里云
1. OCS快速开始__开放缓存OCS 体验_体验馆-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云