
# 设置事件通知(Java SDK)
#### 功能介绍
OBS事件通知功能帮助您对桶的重要的操作进行实时监控，重要操作触发时可及时通知到您，确保您安全、及时知道发生在桶上的关键事件。
调用设置桶的事件通知配置接口，可为指定桶设置事件通知配置。
#### 接口约束
- 您必须是桶拥有者或拥有设置桶的事件通知配置的权限，才能设置桶的事件通知配置。建议使用IAM或桶策略进行授权，如果使用IAM则需授予obs:bucket:PutBucketNotification权限，如果使用桶策略则需授予PutBucketNotification权限。相关授权方式介绍可参见[OBS权限控制概述](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0001.html)，配置方式详见[使用IAM自定义策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0121.html)、[自定义创建桶策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html)。
- OBS支持的Region与Endpoint的对应关系，详细信息请参见[地区与终端节点](https://developer.huaweicloud.com/endpoint?OBS)。
- 在该操作前，需要在消息通知服务SMN[创建主题](https://support.huaweicloud.com/usermanual-smn/zh-cn_topic_0043961401.html)，并[设置主题策略](https://support.huaweicloud.com/usermanual-smn/zh-cn_topic_0043394891.html)为OBS。
 
#### 方法定义
ObsClient.setBucketNotification(final SetBucketNotificationRequest request)
#### 请求参数说明
表1请求参数列表 
| **参数名称** | **参数类型**                                                                                                                           | **是否必选** | **描述**                                                                                                                                                                                   |
|:---|:---|:---|:---|
| request  | [表2 SetBucketCompressPolicyRequest](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_4504.html#obs_21_4504__table14455523) | 必选       | **参数解释** **：** 请求参数，详见[表2 SetBucketCompressPolicyRequest](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_4504.html#obs_21_4504__table14455523)。 |
   
表2SetBucketNotificationRequest 
| **参数名**                         | **类型**                                                                                                                              | **约束** | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|:---|:---|
| bucketName                      | String                                                                                                                              | 必选     | **参数解释** **：** 桶名。 **约束限制：** - 桶的名字需全局唯一，不能与已有的任何桶名称重复，包括其他用户创建的桶。  - 桶命名规则如下： - 3～63个字符，数字或字母开头，支持小写字母、数字、"-"、"."。  - 禁止使用IP地址。  - 禁止以"-"或"."开头及结尾。  - 禁止两个"."相邻（如："my..bucket"）。  - 禁止"."和"-"相邻（如："my-.bucket"和"my.-bucket"）。    - 同一用户在同一个区域多次创建同名桶不会报错，创建的桶属性以第一次请求为准。   **默认取值：** 无 |
| bucketNotificationConfiguration | [表3 CompressPolicyConfiguration](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_4504.html#obs_21_4504__table620017614478) | 必选     | **参数解释** **：** 策略规则数组。详见[表3 CompressPolicyConfiguration](https://support.huaweicloud.com/sdk-java-devg-obs/obs_21_4504.html#obs_21_4504__table620017614478)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
表3BucketNotificationConfiguration 
| **参数名称**                    | **参数类型**                                                                   | **是否必选** | **描述**                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| topicConfigurations         | List\<[表4 TopicConfiguration]\>           | 可选       | **参数解释** **：** 配置事件通知主题的列表。 **取值范围：** 详见[表4 TopicConfiguration] **默认取值：** 无                   |
| functionGraphConfigurations | List\<[表5 FunctionGraphConfiguration]\> | 可选       | **参数解释** **：** 配置函数工作流服务（FunctionGraph）的列表。 **取值范围：** 详见[表5 FunctionGraphConfiguration] **默认取值：** 无 |
   
 表4TopicConfiguration 
| **参数名称** | **参数类型**                                                     | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| id       | String                                                       | 可选       | **参数解释** **：** 每项事件通知配置的唯一标识，如果是用户未指定ID，系统将自动分配一个ID。 **约束限制：** 无 **默认取值：** 无                                                                                       |
| filter   | [表6 Filter]                | 必选       | **参数解释** **：** 用以保存过滤对象名的一组规则。 **取值范围：** 详见[表6 Filter] **默认取值：** 无                                                           |
| topic    | String                                                       | 必选       | **参数解释** **：** 事件通知主题的URN，当OBS检测到桶中发生特定的事件后，将会发布通知消息至该主题，可以在[消息通知服务主题](https://console.huaweicloud.com/smn/#/smn/manager/topic)部分找到具体值。 **约束限制：** 无 **默认取值：** 无 |
| events   | List\<[表7 EventTypeEnum]\> | 可选       | **参数解释** **：** 需要发布通知消息的事件类型列表。 **取值范围：** 详见[表7 EventTypeEnum] **默认取值：** 无                                              |
   
 表5FunctionGraphConfiguration 
| **参数名称**      | **参数类型**                                                     | **是否必选** | **描述**                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| id            | String                                                       | 可选       | **参数解释** **：** 每项事件通知配置的唯一标识，如果是用户未指定ID，系统将自动分配一个ID。 **约束限制：** 无 **默认取值：** 无                                     |
| filter        | [表6 Filter]                | 必选       | **参数解释** **：** 用以保存过滤对象名的一组规则。 **取值范围：** 详见[表6 Filter] **默认取值：** 无          |
| functionGraph | String                                                       | 必选       | **参数解释** **：** 函数工作流服务的URN，当OBS检测到桶中发生特定的事件后，将会发送消息至函数工作流服务调用执行该工作流。 **约束限制：** 无 **默认取值：** 无                |
| events        | List\<[表7 EventTypeEnum]\> | 可选       | **参数解释** **：** 需要发布通知消息的事件类型列表。 **取值范围：** 详见[表7 EventTypeEnum] **默认取值：** 无 |
   
 表6Filter 
| **参数名称**    | **参数类型**                                               | **是否必选** | **描述**                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| filterRules | List\<[表8 FilterRule]\> | 必选       | **参数解释** **：** 用以保存过滤对象名的一组规则。 **取值范围：** 详见[表8 FilterRule] **默认取值：** 无 |
   
 表7EventTypeEnum 
| **常量值**                                  | **描述**                                                                                                        |
|:---|:---|
| OBJECT_CREATED_ALL                       | 所有创建对象操作的事件。包含PUT上传对象、POST上传对象、复制对象、合并段。                                                                      |
| OBJECT_CREATED_PUT                       | PUT上传对象的事件。                                                                                                   |
| OBJECT_CREATED_POST                      | POST上传对象的事件。                                                                                                  |
| OBJECT_CREATED_COPY                      | 复制对象的事件。                                                                                                      |
| OBJECT_CREATED_COMPLETE_MULTIPART_UPLOAD | 合并段的事件。                                                                                                       |
| OBJECT_REMOVED_ALL                       | 所有调用删除、取消段接口的对象操作的事件。 包含指定对象版本号删除对象；多版本开启后，不指定对象版本号删除对象。 |
| OBJECT_REMOVED_DELETE                    | 指定对象版本号删除对象的事件。                                                                                               |
| OBJECT_REMOVED_DELETE_MARKER_CREATED     | 多版本开启后，不指定对象版本号删除对象的事件。                                                                                       |
   
 表8FilterRule 
| **参数名称** | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| name     | String   | 可选       | 指定规则按对象名前缀或者后缀进行过滤，支持的值： - prefix  - suffix   |
| value    | String   | 可选       | 指定的对象名关键字，用以按照前缀或者后缀过滤对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
#### 返回结果说明
表9返回结果HeaderResponse(SDK公共响应结果)各项属性说明 
| **参数名称**        | **参数类型**              | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|
| statusCode      | int                   | **参数解释：** HTTP状态码。 **取值范围：** 状态码是一组从2xx（成功）到4xx或5xx（错误）的数字代码，状态码表示了请求响应的状态。 完整的状态码列表请参见[状态码](https://support.huaweicloud.com/api-obs/obs_04_0114.html)。 **默认取值：** 无 |
| responseHeaders | Map\<String, Object\> | **参数解释：** HTTP响应消息头列表，由多个元组构成。元组中String代表响应消息头的名称，Object代表响应消息头的值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
#### 代码示例
以下代码展示了如何设置桶的事件通知：
```
// Endpoint以北京四为例，其他地区请按实际情况填写。
String endPoint = "https://obs.cn-north-4.myhuaweicloud.com";
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；本示例以ak和sk保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
// 您可以登录访问管理控制台获取访问密钥AK/SK，获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
BucketNotificationConfiguration bucketNotificationConfig = new BucketNotificationConfiguration();
TopicConfiguration topicConfig = new TopicConfiguration();
//自定义消息通知标识
topicConfig.setId("id1");
//主题URN，需要在消息通知服务创建主题，示例：urn:smn:region:project_id:smn_topic
topicConfig.setTopic("your topic");
topicConfig.getEventTypes().add(EventTypeEnum.OBJECT_CREATED_ALL);
Filter topicFilter = new Filter();
topicFilter.getFilterRules().add(new FilterRule("prefix", "smn"));
topicFilter.getFilterRules().add(new FilterRule("suffix", ".jpg"));
topicConfig.setFilter(topicFilter);
bucketNotificationConfig.addTopicConfiguration(topicConfig);
obsClient.setBucketNotification("bucketname", bucketNotificationConfig);
```
