1. SNS概述
关于SNS的功能可以参考官网的介绍:SNS官方介绍
2. 代码实现
官方提供了两个版本的demo,下载源码后可以很方便地找到example,至少大部分是可以的。
以下是总结使用javav2版本的SNS使用,AWS官网例子也有介绍,但是涉及到一些Client配置都是默认配置所以主要对这些部分需要作出小结。
- 首先导入依赖:
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sns</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>regions</artifactId>
</dependency>
- 发送notification功能(完整代码):
public static Boolean sendNotification(SnsClient snsClient, String message, String topicArn, String subject, Map<String, String> attributesMap) {
final Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
attributesMap.forEach((key, value) -> messageAttributes.put(key, MessageAttributeValue.builder().dataType("String").stringValue(value).build()));
PublishRequest request = PublishRequest.builder()
.message(message)
.messageAttributes(messageAttributes)
.topicArn(topicArn)
.subject(subject)
.build();
PublishResponse result = snsClient.publish(request);
return result.sdkHttpResponse().statusCode() == 200;
}
注:关于详细的参数列表可以参考:Request Parameters
3. SQS subscription
-
现在涉及到一个需求就是,通过send notification到SNS的topic,然后SNS会把message发到SQS,也就是说Client直接从SQS的queue来取消息。
-
先进入到Aws console,直接输入Topic Name就可以创建了。
-
创建完成后点右下方的“Create subscription”,创建订阅者。
-
在Protocal那里选择SQS,并且Endpoint选择对应的queue的arn就可以了。
-
订阅成功之后,Topic的Subscriptions如图。
-
至此,只要通过#2的代码发送notification到SNS,就能在SQS的queue poll messages了。
注:
- 关于MessageAttributeValue的配置如果不符合指定格式很容易导致异常,具体的参数配置参考:MessageAttributeValue Method Detail
- 关于PublishRequest的具体参数配置参考:PublishRequest Method Summary
附:
3. 关于java1版本的SNS官网例子比较全,可以参考:Amazon Simple Notification Service