当前位置: 首页 > 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);}}
}

代码示例

http://www.lryc.cn/news/327149.html

相关文章:

  • web前端面试题----->VUE
  • 计算机领域热门技术词汇
  • jsp指令和动作
  • 手撕算法-最小覆盖子串
  • TrOCR—基于Transformer的OCR入门
  • WIN使用LPD协议来共享打印机含统信UOS
  • huawei 华为 交换机 配置 LACP 模式的链路聚合示例 (交换机之间直连)
  • c++ 有名对象和匿名对象
  • day 36 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
  • 【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
  • 三位数组合-第12届蓝桥杯选拔赛Python真题精选
  • Mongodb入门到入土,安装到实战,外包半年学习的成果
  • 【C++初阶】之类和对象(下)
  • Spring Boot 3 极速搭建OAuth2认证框架
  • 大数据开发(离线实时音乐数仓)
  • Python读取csv文件入Oracle数据库
  • Linux_进程概念_冯诺依曼_进程概念_查看进程_获取进程pid_创建进程_进程状态_进程优先级_环境变量_获取环境变量三种方式_3
  • Set A Light 3D Studio中文--- 打造专业级3D照明效果
  • 【深度学习】基于机器学习的无机钙钛矿材料形成能预测,预测形成能,神经网络,回归问题
  • 20240321-2-Adaboost 算法介绍
  • python第三方库的安装,卸载和更新,以及在cmd下pip install安装的包在pycharm不可用问题的解决
  • Python第三次作业
  • ai写作软件选哪个?这5款风靡全球的工具不容错过!
  • 信号处理与分析——matlab记录
  • Android Databinding 使用教程
  • 【每日跟读】常用英语500句(200~300)
  • 【Java开发过程中的流程图】
  • 蓝桥杯刷题-day5-动态规划
  • 新概念英语1:Lesson7内容详解
  • FASTAPI系列 14-使用JSONResponse 返回JSON内容