You need to enable JavaScript to run this app.
导航
管理事件通知(C++ SDK)
最近更新时间:2024.02.04 18:31:05首次发布时间:2023.03.15 15:05:53

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

设置事件通知规则

注意

  • 一个存储桶最多只能创建 10 个事件通知规则。
  • 一个事件通知规则只能选择一个推送目标,即一个函数服务。
  • 一个对象不能匹配多个包含了相同事件类型的规则,即同一个存储桶内,不同规则间类型+前后缀的组合范围不允许重叠。

示例代码

以下代码用于设置桶 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;
}

相关文档

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