首页/新闻资讯/正文详情

使用 AWS SDK for C++ 编写 Hello SNS:通过 ListTopics 入门 Amazon SNS

发布时间:2026/9/24 17:01:53 来源:云帆数科 栏目:资讯中心
使用 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),仅供参考

相关推荐

pip 的 towncrier 变更日志模板解析:从 news fragment 到 NEWS.rst 的渲染机制
pip 的 towncrier 变更日志模板解析:从 news fragment 到 NEWS.rst 的渲染机制

包管理器开发工具 【免费下载链接】pip The Python package installer 项目地址: https://gitcode.com/gh_mirrors/pi/pip 点击查看 免费下载 本篇技术指南围绕 pip 仓库中维护变更日志的核心模板文件 tools/news/template.rst 展开,系统讲解 pip 如何基… · 2026/9/24 17:01:53

Visual Explainer Quick 模式深度指南:用紧凑 JSON Spec 一键渲染自包含 HTML 可视化页面
Visual Explainer Quick 模式深度指南:用紧凑 JSON Spec 一键渲染自包含 HTML 可视化页面

【免费下载链接】visual-explainer Agent skill that generates rich HTML pages or slide decks for diagrams, diff reviews, plan audits, data tables, and project recaps 项目地址: https://gitcode.com/gh_mirrors/vi/visual-explainer 点击查看 免费下载 Q… · 2026/9/24 17:01:53

第23篇-将你的Server发布到MCP-Registry
第23篇-将你的Server发布到MCP-Registry

【MCP 全栈教程】第 23 篇:将你的 Server 发布到 MCP Registry 本系列定位:从协议原理到 Server 开发、Client 开发、再到各大平台实战集成,系统化掌握 MCP(Model Context Protocol)全栈技术体系。 本篇你将学到 serv… · 2026/9/24 17:01:53

Claude Cowork 用着别扭?这个免费开源的跨平台 AI 办公助手,我替你试了
Claude Cowork 用着别扭?这个免费开源的跨平台 AI 办公助手,我替你试了

前阵子我想找个能替代 Claude Cowork 的东西。卡我的点很具体:它只支持 macOS,我那台 Windows 笔记本用不了;它绑死了 Claude 模型,想换 Gemini 试试都不行;再往后还有订阅费(原文提到约 $100/月档&#xf… · 2026/9/24 17:35:07

全局可控与精细化分类:知源AI分级系统赋能教育数据治理落地方案
全局可控与精细化分类:知源AI分级系统赋能教育数据治理落地方案

一、方案概要:AI驱动教育数据精细化治理,实现全域可控与高效落地提示:本方案基于教育数据治理合规要求与业务痛点,依托AI技术构建全流程治理体系,实现数据管控、治理效率、分类精度的三维升级。随着教育数字化深度落地… · 2026/9/24 17:35:07

工业网关选型指南:PLC数据采集、协议转换与MES集成架构分析
工业网关选型指南:PLC数据采集、协议转换与MES集成架构分析

摘要: 制造企业进行数字化建设时,PLC联网并不是简单的数据读取过程,而是涉及设备通信、协议解析、数据转换和业务系统集成的一整套数据架构。工业网关作为现场设备与上层系统之间的数据节点,需要解决设备兼容、数据治理和系统连接… · 2026/9/24 17:35:01

从CRUD到AI:小白程序员5个月逆袭之路,内含收藏必备学习攻略!
从CRUD到AI:小白程序员5个月逆袭之路,内含收藏必备学习攻略!

本文分享了作者从传统CRUD工程师转型为AI应用工程师的5个月心路历程。通过实战先行、深入学习、项目巩固三阶段,结合AI工具辅助,成功掌握AI模型开发、部署与服务化。强调实践导向,推荐利用AI工具提升学习效率,并给出转型建议&… · 2026/9/24 17:35:01

云端 GPU 临时暂停:按量与预付费实例的关机计费边界
云端 GPU 临时暂停:按量与预付费实例的关机计费边界

云端 GPU 实例在调试、等待输入、等待数据或阶段性任务之间暂停,是很常见的状态。 真正容易判断错的地方,不是“实例现在有没有跑任务”,而是把实例运行状态和计费状态当成了同一个变量。 对于按量实例和已经进入按天、周、月周期的实例&… · 2026/9/24 17:35:01

TikTok爆款视频怎么复刻?Clipcat把“找参考、拆结构、换商品”变成一套内容流程
TikTok爆款视频怎么复刻?Clipcat把“找参考、拆结构、换商品”变成一套内容流程

做 TikTok 跨境电商,很多卖家都有类似的经历。 刷到同行的一条视频,发现它的开头很自然,人物动作也很顺,商品卖点在十几秒内就讲清楚了。再回到自己的商品,却不知道该怎么重新设计一条内容。 从零开始做一条带货视频&a… · 2026/9/24 17:35:00

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码