当前位置: 首页 > news >正文

amazon中sns的使用

使用网页配置订阅

  1. 创建主题>使用标准>自定义名称>其他默认 点击创建即可

  2. 创建订阅
    请添加图片描述

  3. 订阅策略配置(不配置,会推送给多个人,除非你每个都创建主题)请添加图片描述
    注意: 可以你可以随便写,后面的值只能是对象,不然会报错

  4. 创建好订阅,会给你配置的链接推送请求(post请求,text/plain 格式)

body参数如下:

{Type: 'SubscriptionConfirmation',MessageId: 'e67f028f-3392-4f8e-871e-d5f6c1de7256',Token:'***',TopicArn: 'arn:aws:sns:us-west-1:180656209983:klover-test-topic',Message:'***',SubscribeURL:'https://sns.us-west-1.amazonaws.com/?***',SignatureVersion: '1',Signature:'***',SigningCertURL: '***',
};
  1. 确认订阅
    (1)使用浏览器直接访问 SubscribeURL(第四步返回的url)
    (2)使用页面订阅 在下面输入框输入 SubscribeURL(第四步返回的url)

请添加图片描述
6. 如果没有接收到确认订阅 可以选择再次发送
请添加图片描述

安装java jar包

        <dependency><groupId>software.amazon.awssdk</groupId><artifactId>sns</artifactId><version>2.16.60</version></dependency>

使用

        // 推送String message = "{\"test\":1,\"name\":\"klover\"}";Sns.pubTopic(message); // 使用代码订阅Sns.subscribe("https://www.xxx.cn/api", "https");

工具类

package com.klover.sns;import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.*;import java.util.HashMap;
import java.util.Map;/*** Sns* <a href="https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/javav2/example_code/sns/src/main/java/com/example/sns/PublishTopic.java">sns 代码</a>** @author klover* @date 2024/3/28 15:05*/
public class Sns {private static final SnsClient snsClient;private static final String accessKeyId = "<your access key id>";private static final String secretAccessKey = "<your secret access key>";private static final String topicArn = "<your topic ARN>";static {AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKeyId,secretAccessKey);snsClient = SnsClient.builder().region(Region.US_WEST_1).credentialsProvider(() -> credentials).build();}/*** 推送消息** @param message*/public static void pubTopic(String message) {try {// 通过筛选策略 指定推送者Map<String, MessageAttributeValue> map = new HashMap<>();map.put("clientId", MessageAttributeValue.builder().dataType("String").stringValue("123456").build());PublishRequest request = PublishRequest.builder().message(message).topicArn(topicArn).messageAttributes(map).build();PublishResponse result = snsClient.publish(request);System.out.println(result.messageId() + " Message sent. Status is " + result.sdkHttpResponse().statusCode());} catch (SnsException e) {System.out.println(e.awsErrorDetails().errorMessage());}}/*** 订阅** @param url* @param protocol http https*/public static void subscribe(String url, String protocol) {try {SubscribeRequest request = SubscribeRequest.builder().protocol(protocol).endpoint(url).returnSubscriptionArn(true).topicArn(topicArn).build();SubscribeResponse result = snsClient.subscribe(request);System.out.println("Subscription ARN is " + result.subscriptionArn() + "\n\n Status is "+ result.sdkHttpResponse().statusCode());// 设置筛选策略SetSubscriptionAttributesRequest subscriptionAttributesRequest = SetSubscriptionAttributesRequest.builder().subscriptionArn(result.subscriptionArn()).attributeName("FilterPolicy") // 这个名称不能动.attributeValue("{\"clientId\": [\"123457\"]}") // 底层要求 必须是对象 这个字段可以自己自定义.build();SetSubscriptionAttributesResponse setSubscriptionAttributesResponse = snsClient.setSubscriptionAttributes(subscriptionAttributesRequest);System.out.println(setSubscriptionAttributesResponse.sdkHttpResponse().statusCode());} catch (SnsException e) {System.out.println(e.awsErrorDetails().errorMessage());}}/*** 取消订阅**/public static void unsubscribe(String subscriptionArn) {try {UnsubscribeRequest request = UnsubscribeRequest.builder().subscriptionArn(subscriptionArn).build();UnsubscribeResponse result = snsClient.unsubscribe(request);System.out.println("\n\nStatus was " + result.sdkHttpResponse().statusCode()+ "\n\nSubscription was removed for " + request.subscriptionArn());} catch (SnsException e) {System.err.println(e.awsErrorDetails().errorMessage());System.exit(1);}}
}

代码示例

相关文章:

  • Android ViewBinding 使用
  • 【QT入门】 Qt自定义信号后跨线程发送信号
  • 基于大语言模型的云故障根因分析|顶会EuroSys24论文
  • 操作系统系列学习——多级页表与快表
  • k8s入门到实战(十四)—— Helm详细介绍及使用
  • Java实现猜数字游戏:编程入门之旅
  • 数学建模常用的代码
  • Jmeter 从登录接口提取cookie 并 跨线程组调用cookie (超详细)
  • 游戏本笔记本更换@添加内存条实操示例@DDR5内存条
  • Linux 基于HAProxy+KeepAlived实现
  • 安防监控视频汇聚平台EasyCVR启用图形验证码之后如何调用login接口?
  • linux入门级学习指南
  • docker-compose(mysql5.6、mysql8、neo4j3.5、redis)
  • Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported
  • 自动化测试:Selenium中的时间等待
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【node学习】协程
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2019年如何成为全栈工程师?
  • Bootstrap JS插件Alert源码分析
  • Go 语言编译器的 //go: 详解
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript设计模式之工厂模式
  • MaxCompute访问TableStore(OTS) 数据
  • Python 反序列化安全问题(二)
  • Python爬虫--- 1.3 BS4库的解析器
  • React as a UI Runtime(五、列表)
  • socket.io+express实现聊天室的思考(三)
  • SpriteKit 技巧之添加背景图片
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 多线程事务回滚
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 数据可视化之 Sankey 桑基图的实现
  • 学习HTTP相关知识笔记
  • 怎样选择前端框架
  • elasticsearch-head插件安装
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ssh免密码登录设置及问题总结
  • #宝哥教你#查看jquery绑定的事件函数
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转)Sublime Text3配置Lua运行环境
  • .NET Micro Framework初体验(二)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @Pointcut 使用
  • @vue/cli 3.x+引入jQuery
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [<死锁专题>]