使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载导读本文围绕仓库中的 Hello SNS 示例 展开讲解如何用 AWS SDK for C 构建一个最小的 Amazon Simple Notification ServiceAmazon SNS入门应用初始化 SNS 客户端、调用ListTopics列出当前账号下全部主题并处理分页响应。读完本文你将掌握该 CMake 工程从环境准备、编译、运行到最小权限配置的完整实战流程并通过源码级剖析理解 SDK 客户端初始化、分页循环与结果处理的底层写法。示例定位仓库中的 Hello World 启动应用在 cpp/example_code/sns/ 目录中Amazon SNS 的 C 示例被划分为三类Get started入门示例即本示例 hello_sns核心动作是ListTopics用于验证 SDK 安装与凭证配置是否正确Single actions单动作示例如 create_topic.cpp、delete_topic.cpp、publish_to_topic.cpp、subscribe_email.cpp 等逐一演示单个服务 APIScenarios场景示例如 publish_sms.cpp发送短信、topics_and_queues消息发布到队列等演示多个 API 协同完成业务。hello_sns 是整个 SNS 示例集的门面它不创建任何资源、不需要任何参数只需列出主题即可确认SDK 可用、凭证有效、SNS 服务可达是开发者接入 SNS 前最合适的冒烟测试smoke test。环境准备与前置条件安装并配置 AWS SDK for C在编译本示例前需要先完成 AWS SDK for C 的安装与环境设置包括安装 SDK 及其依赖CMake、编译工具链、必要的第三方库配置 AWS 凭证访问密钥、区域等SDK 会按标准链自动读取环境变量、共享凭证文件或 IAM 角色构建并安装 SDK 时需要包含sns服务组件。官方入门指引可参考 AWS SDK for C Developer Guide 中的 Getting started 章节该文档在仓库的 hello_sns/README.md 和 hello_sns.cpp 头部注释中均有引用。凭证与最小权限示例运行只需要列出主题因此官方推荐直接使用 AWS 托管策略arn:aws:iam::aws:policy/AmazonSNSReadOnlyAccess该策略仅授予 SNS 的只读权限符合最小权限least privilege原则。若你希望使用自定义策略只需包含sns:ListTopics权限即可。请注意运行本代码以及运行相关测试可能产生 AWS 账户费用且代码并未在所有 AWS 区域做过测试建议按需选择区域。构建工程CMake 配置逐项解读示例使用 CMake 构建系统官方文档明确要求 CMake 3.13 及以上。如果使用支持 CMake 的 IDE如 CLion、Visual Studio、VS Code CMake Tools可直接按 IDE 提示打开工程也可以在命令行完成构建。命令行构建步骤进入hello_sns目录后执行mkdir build cd build cmake --build ..构建产物名为hello_sns可执行文件。若你使用的是原生构建系统如 Makefiles、Ninja、Visual Studio 工程也可先用cmake ..生成对应构建系统的输入文件再用该系统构建。CMakeLists.txt 关键配置仓库中的 CMakeLists.txt 是构建的核心各配置项作用如下配置项值作用说明cmake_minimum_required3.13声明所需最低 CMake 版本SERVICE_COMPONENTSsns指定需要链接的 AWS SDK 服务组件find_package(AWSSDK)只会引入该组件projecthello_sns工程名同时也是可执行目标名CMAKE_CXX_STANDARD11AWS SDK for C 要求至少 C 11WINDOWS_BUILD${MSVC}用 MSVC 变量判断是否 Windows 构建find_package(AWSSDK REQUIRED COMPONENTS sns)—查找已安装的 AWS SDK并定位 sns 组件头文件与库add_executablehello_sns.cpp将源码编译为可执行文件target_link_libraries${AWSSDK_LINK_LIBRARIES}链接 SDK 库值得注意的细节Windows 下需要额外把aws-cpp-sdk-all追加到CMAKE_PREFIX_PATH否则find_package(AWSSDK)可能找不到已安装的 SDK若 SDK 以动态库方式安装Windows 构建时会通过AWSSDK_CPY_DYN_LIBS把相关 DLL 复制到二进制输出目录便于直接运行和调试如果从命令行构建且 DLL 落在Debug等子目录需要取消注释set(BIN_SUB_DIR /Debug)并设置正确子目录若构建失败尤其 Windows 平台优先检查并调整该 CMakeLists.txt。源码剖析ListTopics 分页调用全流程示例全部逻辑位于 hello_sns.cpp 的main函数中共分三个阶段。阶段一初始化 SDKAws::SDKOptions options; // options.loggingOptions.logLevel Utils::Logging::LogLevel::Debug; // 可选开启调试日志 Aws::InitAPI(options); // 整个进程只能调用一次Aws::InitAPI(options)必须在任何 SDK 调用前执行且整个进程只调用一次对应的Aws::ShutdownAPI(options)也必须在退出前且只调用一次。代码将主体逻辑放入独立花括号块确保客户端析构完成后再关闭 SDK。若需要排查问题可取消注释Debug级别的日志配置。阶段二创建客户端Aws::Client::ClientConfiguration clientConfig; // clientConfig.region us-east-1; // 可选显式覆盖区域默认读取配置 Aws::SNS::SNSClient snsClient(clientConfig);SNSClient的构造接受一个Aws::Client::ClientConfiguration区域、超时等设置默认从 SDK 配置文件与凭证链解析如需显式指定区域可取消注释clientConfig.region一行。注意该模式与仓库中其他示例一致例如 list_topics.cpp 中的listTopics函数同样接收clientConfiguration参数并构造SNSClient。阶段三分页列出主题并输出Aws::VectorAws::SNS::Model::Topic allTopics; Aws::String nextToken; do { Aws::SNS::Model::ListTopicsRequest request; if (!nextToken.empty()) { request.SetNextToken(nextToken); } const Aws::SNS::Model::ListTopicsOutcome outcome snsClient.ListTopics(request); if (outcome.IsSuccess()) { const Aws::VectorAws::SNS::Model::Topic paginatedTopics outcome.GetResult().GetTopics(); if (!paginatedTopics.empty()) { allTopics.insert(allTopics.cend(), paginatedTopics.cbegin(), paginatedTopics.cend()); } } else { std::cerr Error listing topics outcome.GetError().GetMessage() std::endl; return 1; } nextToken outcome.GetResult().GetNextToken(); } while (!nextToken.empty());要点解读分页处理ListTopics的响应是分页的通过GetNextToken()取回下一页令牌非空则继续请求直到令牌为空从而保证能拿到账号下全部主题Outcome 模式SDK 采用Outcome返回值调用方先通过IsSuccess()判断成败失败时从GetError().GetMessage()读取错误信息并返回非零退出码结果收集每页的Topic对象含TopicArn追加到allTopics容器最后统一打印std::cout Hello Amazon SNS! You have allTopics.size() topic (allTopics.size() 1 ? : s) in your account. std::endl; if (!allTopics.empty()) { std::cout Here are your topic ARNs. std::endl; for (const Aws::SNS::Model::Topic topic: allTopics) { std::cout * topic.GetTopicArn() std::endl; } }输出示例当账号下没有主题时打印Hello Amazon SNS! You have 0 topics in your account.有主题时额外逐行打印各主题 ARN形如arn:aws:sns:region:account-id:topic-name。与单动作示例的异同同一目录下的 list_topics.cpp 提供了等价的listTopics函数位于AwsDoc::SNS命名空间声明见 sns_samples.h其分页循环与 hello_sns 完全一致区别在于它被编译为run_list_topics可执行文件且通过#ifndef TESTING_BUILD包裹main便于测试框架在TESTING_BUILD宏下直接复用该函数——这正是仓库示例动作函数与 main 分离、可测试的通用结构。验证与测试仓库内的自动化测试仓库为 SNS 示例提供了完整的 GoogleTest 测试工程可用于验证本示例所依赖的 SNS 客户端与凭证链路。测试构建与运行在 cpp/example_code/sns/README.md 中给出了标准流程cd BUILD_DIR cmake path-to-root-of-this-source-code -DBUILD_TESTSON make ctest其中path-to-root-of-this-source-code指向cpp/example_code/sns目录。主目录 CMakeLists.txt 在BUILD_TESTS开启时会add_subdirectory(tests)测试工程 tests/CMakeLists.txt 会查找或自动拉取 GoogleTest并把所有gtest_*.cpp与对应的*.cpp示例源码一起编译进sns_gtest可执行文件。与本示例直接相关的测试gtest_list_topics.cpp 中的用例TEST_F(SNS_GTests, list_topics_2_) { auto result AwsDoc::SNS::listTopics(*s_clientConfig); ASSERT_TRUE(result); }测试名后缀_2_表示该用例需要凭证与权限但不需要预先创建 AWS 资源测试类型约定见文件头注释_1_需要凭证、权限与 AWS 资源_2_需要凭证与权限_3_不需要凭证。它直接复用listTopics验证与 hello_sns 相同的核心调用链。测试基础设施 sns_gtests.cpp 还提供了MockHTTP与CustomMockHTTPClient对 HTTP 层进行 mock用mock_input/*.xml文件见 tests/mock_input模拟服务端响应避免真实请求测试套件级SetUpTestSuite/TearDownTestSuite的客户端配置、资源清理如残留主题与订阅TESTING_BUILD编译宏配合源码中#ifndef TESTING_BUILD屏蔽各自的main。运行示例构建完成后在build目录下直接运行./hello_sns程序会依次完成 SDK 初始化、客户端创建与分页列举最终输出账号内的主题数量与全部主题 ARN。运行前请确认凭证已按标准链配置且具备AmazonSNSReadOnlyAccess或等价权限目标区域选择正确可通过clientConfig.region覆盖知晓运行可能产生费用。延伸阅读父级文档 cpp/example_code/sns/README.md 列出了全部 SNS 单动作与场景示例包括创建/删除主题、发布消息、订阅email/app/Lambda、SMS 类型设置等单动作示例源码集中在 cpp/example_code/sns/ 目录函数声明统一见 sns_samples.h跨服务场景 topics_and_queues 展示 SNS 主题与 SQS 队列联动的完整消息流更完整的 C SDK 使用指引见仓库根目录的 cpp/README.rst。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐AWS SDK for Java 2.x 实现 Amazon SNS 消息通知服务实践指南AWS SDK for Java 2.x 实现 Amazon SNS 消息通知服务实践指南 概述 Amazon Simple Notification Serv示例工程教程后端AWS Glue Hello 入门示例解析使用 AWS SDK for C 调用 ListJobsAWS Glue Hello 入门示例解析使用 AWS SDK for C 调用 ListJobs 本文围绕 cpp/example_code/glue/示例工程教程后端使用 AWS SDK for C 构建 Hello Amazon S3 入门项目基于 aws-doc-sdk-examples 的完整实战指南使用 AWS SDK for C 构建 Hello Amazon S3 入门项目基于 aws doc sdk examples 的完整实战指南 本指南围绕示例工程教程后端上一篇抖音内容下载从入门到实战douyin-downloader 保姆级上手全攻略下一篇鸣潮自动化脚本上手全攻略后台自动战斗、自动刷声骸ok-ww 帮你省下 80% 重复操作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考