AMAZON SNS(1)Set up SNS to SQS and JAVA API
1. Create a Topic on SNS
Directly go to the console and follow the buttons and labels.
https://console.aws.amazon.com/sns/v2/home?region=us-east-1#/home
2. Create the SQS Queue
Directly go to the console and follow the buttons and labels
https://console.aws.amazon.com/sqs/home?region=us-east-1
3. Subscribe the Message from SNS for SQS
Following this document
http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqssubscribe.html
On the SQS side, we can multiple select 3 SQS I need and subscribe the SNS.
On the SNS side, I can click on the name of the SNS to confirm/delete the subscription.
4. Java API
http://docs.aws.amazon.com/zh_cn/sns/latest/dg/using-awssdkjava.html
Here is the SNSMessage.scala Codes
package com.sillycat.jobsconsumer.messagequeue
import com.amazonaws.auth.{BasicAWSCredentials}
import com.amazonaws.services.sns.{AmazonSNSAsyncClient, AmazonSNSClient}
import com.sillycat.jobsconsumer.utilities.{IncludeConfig, IncludeLogger}
import com.amazonaws.regions.Region
import com.amazonaws.regions.Regions
object SNSMessage extends IncludeLogger with IncludeConfig{
private def getCredential = {
new BasicAWSCredentials(
config.getString(envStr("sns.keyId")),
config.getString(envStr("sns.accessKey")))
}
def getClient = {
val snsClient:AmazonSNSClient = new AmazonSNSClient(getCredential)
snsClient.setRegion(Region.getRegion(Regions.fromName(config.getString(envStr("sns.region")))))
snsClient
}
def getAsyncClient = {
val snsClient:AmazonSNSClient = new AmazonSNSAsyncClient(getCredential)
snsClient.setRegion(Region.getRegion(Regions.fromName(config.getString(envStr("sns.region")))))
snsClient
}
}
The Trait Class, IncludeSNSProducer.scala
package com.sillycat.jobsconsumer.messagequeue.producer
import com.amazonaws.services.sns.model.{PublishResult, PublishRequest}
import com.sillycat.jobsconsumer.messagequeue.{SNSMessage}
import com.sillycat.jobsconsumer.utilities.{IncludeConfig, IncludeLogger}
trait IncludeSNSProducer extends IncludeLogger with IncludeConfig {
protected def topicArn = "default"
def sendMessage(sourceMsg: String): PublishResult = {
val publishRequest:PublishRequest = new PublishRequest(topicArn, prepareMessage(sourceMsg))
val publishResult:PublishResult = SNSMessage.getClient.publish(publishRequest)
publishResult
}
protected def prepareMessage(sourceMsg:Any):String
}
The test class, SNSMessageSpec.scala
package com.sillycat.jobsconsumer.messagequeue
import com.amazonaws.services.sns.model.PublishRequest
import com.amazonaws.services.sns.{AmazonSNSClient}
import com.sillycat.jobsconsumer.utilities.{IncludeLogger, IncludeConfig}
import org.scalatest.{BeforeAndAfterAll, Matchers, FunSpec}
class SNSMessageSpec extends FunSpec with Matchers with BeforeAndAfterAll with IncludeConfig with IncludeLogger{
var client: AmazonSNSClient= _
var topicArn: String = config.getString(envStr("sns.topicArn.classifiedjobs"))
override def beforeAll(): Unit = {
if(config.getString("build.env").equals("test")){
logger.info("No embedded SNS, ignore the test")
}else{
client = SNSMessage.getClient
}
}
override def afterAll() {
}
describe("IncludeSNSProducer") {
describe("sendMessage"){
it("Directly Send String") {
if(config.getString("build.env").equals("test")){
logger.info("No embedded SNS, ignore the test")
}else{
val expect = "134343143"
val publishRequest:PublishRequest = new PublishRequest(topicArn, "134343143")
val result = client.publish(publishRequest)
result.getMessageId should not be (null)
}
}
}
}
}
References:
http://docs.aws.amazon.com/zh_cn/sns/latest/dg/SNSMobilePushBaiduAPI.html
https://aws.amazon.com/cn/sns/getting-started/
http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
http://docs.aws.amazon.com/zh_cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqssubscribe.html
AMAZON SNS(1)Set up SNS to SQS and JAVA API
猜你喜欢
转载自sillycat.iteye.com/blog/2243392
今日推荐
周排行