AMAZON SNS(1)Set up SNS to SQS and JAVA API

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

猜你喜欢

转载自sillycat.iteye.com/blog/2243392
SNS