TOS 支持将部分事件的变动投递到函数服务。如果您希望实时掌握在 TOS 中的资源变动,可以设置事件通知规则。本文介绍事件通知的示例代码。
关于函数服务的详细信息,请参见什么是函数服务。
注意
以下代码用于设置桶 examplebucket 的事件通知规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 填写目标函数服务 cloudFunction std::string cloudFunction = "your cloud function"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); PutBucketNotificationInput input(bucketName); // 设置事件通知的过滤规则 // 如果前后缀均未设置,则会匹配存储桶内所有对象。 FilterKey filterKey; // 设置匹配对象的前缀的信息为 test/,会筛选 test 目录下的对象。 FilterRule rule1({"prefix", "test/"}); // 设置匹配对象的后缀的信息为 .png,会筛选所有格式为 png 的对象。 FilterRule rule2({"suffix", ".png"}); filterKey.setRules({rule1,rule2}); Filter filter(filterKey); CloudFunctionConfiguration configuration; // 设置 id configuration.setId("test-id"); // 设置事件类型 configuration.setEvents({"tos:ObjectCreated:Put"}); // 设置目标函数服务 configuration.setCloudFunction(cloudFunction); // 设置过滤规则 configuration.setFilter(filter); auto output = client.putBucketNotification(input); if (!output.isSuccess()) { // 异常处理 std::cout << "PutBucketNotification failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "PutBucketNotification success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
注意
要获取桶的事件通知规则,默认您必须为桶所有者。
以下代码用于获取桶 examplebucket 的事件通知规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); GetBucketNotificationInput input(bucketName); auto output = client.getBucketNotification(input); if (!output.isSuccess()) { // 异常处理 std::cout << "GetBucketNotification failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "GetBucketNotification success." << std::endl; for (const auto& config : output.result().getCloudFunctionConfigurations()) { std::cout << "id:" << config.getId() << std::endl; std::cout << "cloud function:" << config.getCloudFunction() << std::endl; auto rules = config.getFilter().getKey().getRules(); for(const auto& rule : rules){ std::cout << "filter name:" << rule.getName() << std::endl; std::cout << "filter value:" << rule.getValue() << std::endl; } for(const auto& event : config.getEvents()){ std::cout << "event:" << event << std::endl; } } // 释放网络等资源 CloseClient(); return 0; }
关于事件通知配置的更多信息,请参见事件通知。