閱讀685 返回首頁    go 魔獸


事件通知__開發人員指南_消息服務-阿裏雲

MNS 推出重磅功能,支持阿裏雲各大服務通過MNS實現事件通知(回調)。用戶可以通過在MNS上創建事件通知的規則,來關注其他阿裏雲產品指定資源上產生的事件,並且由MNS以消息的方式主動推送到指定的接收端。

  • 事件通知按區域提供服務
  • 事件通知為異步通知,不會影響用戶使用其他雲產品的體驗
  • 事件通知消息在有效時間內不會丟失,當用戶接收消息失敗時,會按照指定的重試策略重試
  • 事件通知消息的接收端目前支持HttpServer和Queue(可以將消息轉移到Queue中,由用戶來主動消費)
  • 事件通知中消息推送的相關介紹請參考主題模型

event-notification

注意事項

  • 事件通知規則創建完,約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編碼,解碼後為:
  1. {
  2. "code": "Success", //此次觸發事件通知的結果,如果成功,則為Success,否則為Fail,需要注意的是,Success隻表示oss將消息發送到了topic中,並不代表topic將消息推送到了endpoint那裏
  3. "message": "NotificationSucceed", //此次操作的詳細描述,如果失敗,此處會說明失敗的原因
  4. "type": "EventNotification", //操作類型,事件通知統一為"EventNotification",判斷的時候需要先判斷此類型
  5. "version": "1.0"} //版本號

示例:

  1. 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格式,具體內容如下:
  1. {"events": [{
  2. "eventName": "", //事件通知類型
  3. "eventSource": "", //消息源,固定為"acs:oss"
  4. "eventTime": "", //事件事件,格式為ISO-8601
  5. "eventVersion": "", //版本號,目前為"1.0"
  6. "oss": {
  7. "bucket": {
  8. "arn": "", //bucket的唯一標識符,格式為"acs:oss:region:uid:bucket"
  9. "name": "", //bucket名稱
  10. "ownerIdentity": ""}, //bucket的owner
  11. "object": {
  12. "deltaSize": , //object大小的變化量,比如新增一個文件,這個值就是文件大小,如果是覆蓋一個文件,這個值就是新文件與舊文件的差值,因此可能為負數
  13. "eTag": "", //object的etag,與GetObject()請求返回的ETag頭的內容相同
  14. "key": "", //object名稱
  15. "position":, //可變項,隻有在ObjectCreated:AppendObject事件中才有,表示此次請求開始append的文職,注意是從0開始
  16. "readFrom": , //可變項,隻有在ObjectDownloaded:GetObject事件中才有,表示文件開始讀取的位置,如果不是Range請求,則此項為0,否則則是Range請求的開始字節,注意是從0開始
  17. "readTo": , //可變項,隻有在ObjectDownloaded:GetObject事件中才有,表示文件最後讀取的文職,如果不是Range請求,則此項為文件的大小,否則則是Range請求的結束字節增1
  18. "size": }, //object大小
  19. "ossSchemaVersion": "", //此字段域的版本號,目前為"1.0"
  20. "ruleId": "GetObject"}, //此事件匹配的規則ID
  21. "region": "", //bucket所在的region
  22. "requestParameters": {
  23. "sourceIPAddress": ""}, //請求的源IP
  24. "responseElements": {
  25. "requestId": ""}, //請求對應的requestid
  26. "userIdentity": {
  27. "principalId": ""}, //請求發起者的uid
  28. "xVars": { //oss的callback功能中的自定義參數
  29. "x:callback-var1":"value1",
  30. "x:vallback-var2":"value2"}}]}

示例:

  1. {"events": [{
  2. "eventName": "ObjectDownloaded:GetObject",
  3. "eventSource": "acs:oss",
  4. "eventTime": "2016-07-01T11:17:30.000Z",
  5. "eventVersion": "1.0",
  6. "oss": {
  7. "bucket": {
  8. "arn": "acs:oss:cn-shenzhen:1148930107246818:event-notification-test-shenzhen",
  9. "name": "event-notification-test-shenzhen",
  10. "ownerIdentity": "1148930107246818"},
  11. "object": {
  12. "deltaSize": 0,
  13. "eTag": "0CC175B9C0F1B6A831C399E269772661",
  14. "key": "test",
  15. "readFrom": 0,
  16. "readTo": 1,
  17. "size": 1},
  18. "ossSchemaVersion": "1.0",
  19. "ruleId": "GetObjectRule"},
  20. "region": "cn-shenzhen",
  21. "requestParameters": {
  22. "sourceIPAddress": "140.205.128.90"},
  23. "responseElements": {
  24. "requestId": "5776514AF09A9E6542425D2B"},
  25. "userIdentity": {
  26. "principalId": "1148930107246818"},
  27. "xVars": {
  28. "x:callback-var1":"value1",
  29. "x:vallback-var2":"value2"}}]}

最後更新:2016-11-23 16:04:14

  上一篇:go 主題操作__主題模型_開發人員指南_消息服務-阿裏雲
  下一篇:go 日誌管理__開發人員指南_消息服務-阿裏雲