You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
管理桶配置
管理事件通知(Java SDK)
复制全文
下载 pdf
管理事件通知(Java SDK)

TOS 支持将部分事件的变动投递到函数服务。如果您希望实时掌握在 TOS 中的资源变动,可以设置事件通知规则。本文介绍事件通知的示例代码。
关于函数服务的详细信息,请参见什么是函数服务

设置事件通知规则

您可以通过 TOS Java SDK 的 putBucketNotification 接口配置指定桶的事件通知规则。

注意

  • 要配置桶的事件通知规则,您必须是桶 Owner。
  • 设置事件通知需要依赖函数服务,您需要提前在火山引擎中创建函数服务并发布。
  • 一个存储桶最多只能创建 10 个事件通知规则。
  • 一个事件通知规则只能选择一个推送目标,即一个函数服务。

示例代码

以下代码展示如何设置桶的事件通知规则。

import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosClientException;
import com.volcengine.tos.TosServerException;
import com.volcengine.tos.model.bucket.*;

import java.util.ArrayList;
import java.util.List;

public class PutBucketNotificationExample {
    public static void main(String[] args) {
        String endpoint = "your endpoint";
        String region = "your region";
        String accessKey = System.getenv("TOS_ACCESS_KEY");
        String secretKey = System.getenv("TOS_SECRET_KEY"); 

        String bucketName = "bucket-example";

        // 事件通知名称
        String id = "event notification id";
        // 设置订阅事件的函数服务
        String cloudFunction = "your cloud function";

        String event = "tos:ObjectCreated:Put";

        TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);

        try{
            // 需要订阅的事件,以下仅为示例,含义是上传对象事件
            List<String> events = new ArrayList<>();
            events.add(event);
            FilterRule rule = new FilterRule().setName("prefix").setValue("test-");
            List<FilterRule> rules = new ArrayList<>();
            rules.add(rule);
            Filter filter = new Filter().setKey(new FilterKey().setRules(rules));
            CloudFunctionConfiguration configuration = new CloudFunctionConfiguration()
                    .setId(id).setCloudFunction(cloudFunction)
                    .setEvents(events)
                    // 设置匹配对象的前缀信息和后缀信息
                    .setFilter(filter);
            List<CloudFunctionConfiguration> configurations = new ArrayList<>();
            configurations.add(configuration);
            PutBucketNotificationInput input = new PutBucketNotificationInput().setBucket(bucketName)
                    .setCloudFunctionConfigurations(configurations);
            PutBucketNotificationOutput output = tos.putBucketNotification(input);
            System.out.println("putBucketNotification succeed");
        } catch (TosClientException e) {
            // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送
            System.out.println("putBucketNotification failed");
            System.out.println("Message: " + e.getMessage());
            if (e.getCause() != null) {
                e.getCause().printStackTrace();
            }
        } catch (TosServerException e) {
            // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息
            System.out.println("putBucketNotification failed");
            System.out.println("StatusCode: " + e.getStatusCode());
            System.out.println("Code: " + e.getCode());
            System.out.println("Message: " + e.getMessage());
            System.out.println("RequestID: " + e.getRequestID());
        } catch (Throwable t) {
            // 作为兜底捕获其他异常,一般不会执行到这里
            System.out.println("putBucketNotification failed");
            System.out.println("unexpected exception, message: " + t.getMessage());
        }
    }
}

获取事件通知规则

您可以通过 TOS Java SDK 的 getBucketNotification 接口获取指定桶配置的事件通知规则。

注意

要获取桶的事件通知规则,默认您必须为桶 Owner。

示例代码

以下代码展示如何获取桶的事件通知规则。

import com.volcengine.tos.TOSV2;
import com.volcengine.tos.TOSV2ClientBuilder;
import com.volcengine.tos.TosClientException;
import com.volcengine.tos.TosServerException;
import com.volcengine.tos.model.bucket.CloudFunctionConfiguration;
import com.volcengine.tos.model.bucket.GetBucketNotificationInput;
import com.volcengine.tos.model.bucket.GetBucketNotificationOutput;

public class GetBucketNotificationExample {
    public static void main(String[] args) {
        String endpoint = "your endpoint";
        String region = "your region";
        String accessKey = System.getenv("TOS_ACCESS_KEY");
        String secretKey = System.getenv("TOS_SECRET_KEY"); 

        String bucketName = "bucket-example";

        TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);

        try{
            GetBucketNotificationInput input = new GetBucketNotificationInput().setBucket(bucketName);
            GetBucketNotificationOutput output = tos.getBucketNotification(input);
            System.out.println("getBucketNotification succeed");
            if (output.getCloudFunctionConfiguration() != null) {
                System.out.println("this bucket has " + output.getCloudFunctionConfiguration().size() + " notification rules");
                for (int i = 0; i < output.getCloudFunctionConfiguration().size(); i++){
                    CloudFunctionConfiguration conf = output.getCloudFunctionConfiguration().get(i);
                    // 事件通知名称
                    System.out.println("Cloud Function Configuration ID:" + conf.getId());
                    // 订阅的事件
                    if (conf.getEvents() != null && conf.getEvents().size() > 0) {
                        for(int j = 0; j < conf.getEvents().size(); j++) {
                            System.out.println("Cloud Function Configuration Events " + j + " is " + conf.getEvents().get(j));
                        }
                    }
                    // 设置匹配对象的前缀信息和后缀信息
                    System.out.println("Cloud Function Configuration Filter " + conf.getFilter());
                    // 设置订阅事件的函数服务
                    System.out.println("Cloud Function Configuration CloudFunction " + conf.getCloudFunction());
                }
            }
        } catch (TosClientException e) {
            // 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送
            System.out.println("getBucketNotification failed");
            System.out.println("Message: " + e.getMessage());
            if (e.getCause() != null) {
                e.getCause().printStackTrace();
            }
        } catch (TosServerException e) {
            // 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息
            System.out.println("getBucketNotification failed");
            System.out.println("StatusCode: " + e.getStatusCode());
            System.out.println("Code: " + e.getCode());
            System.out.println("Message: " + e.getMessage());
            System.out.println("RequestID: " + e.getRequestID());
        } catch (Throwable t) {
            // 作为兜底捕获其他异常,一般不会执行到这里
            System.out.println("getBucketNotification failed");
            System.out.println("unexpected exception, message: " + t.getMessage());
        }
    }
}

相关文档

关于事件通知配置的更多信息,请参见事件通知

最近更新时间:2024.02.04 18:31:05
这个页面对您有帮助吗?
有用
有用
无用
无用