Environments

  • go version go1.12.8 darwin/amd64
  • Docker version 19.03.4
  • docker-compose version 1.24.1

Docker compose setting

version: '3'
services:

  elasticmq:
    image: softwaremill/elasticmq
    container_name: elasticmq
    ports:
      - "9324:9324"
    networks:
      container:
        ipv4_address: 10.2.0.2

  app:
    image: app:latest
    container_name: app
    ports:
      - "8000:8000"
    networks:
      container:
        ipv4_address: 10.2.0.3

networks:
  container:
    driver: bridge
    ipam:
      config:
        - subnet: 10.2.0.0/16

go code

var QueueURL string
var QueueName string

func getSqsClient() *sqs.SQS {
	var sqsClient *sqs.SQS
	sess, err := session.NewSession(aws.NewConfig().
		WithRegion("ap-northeast-1").
		WithCredentials(credentials.NewStaticCredentials(
			service.GetAwsAccessKey(),
			service.GetAwsSecretKey(), "")))
	if err != nil {
		panic("NewSession failed error:" + err.Error())
	}

	if service.UseAwsSQS(){
		sqsClient = sqs.New(sess)
		QueueURL = service.GetSQSBaseEndpoint() + "/" + QueueName
	}else{
		// Use ElasticMQ
		sqsClient = sqs.New(sess, &aws.Config{Endpoint: aws.String("http://10.2.0.2:9324")})
		QueueURL = "http://10.2.0.4:9324/queue/" + QueueName

		// -------
		// Option: create queue
		// -------
		res, err := SqsClient.CreateQueue(&sqs.CreateQueueInput{
			QueueName: aws.String(QueueName),
		})
		if err != nil{
			panic("CreateQueue failed error:"+err.Error())
		}
		log.Infof("created new queue(%s) on elasticMQ", *res.QueueUrl)
		// -------
	}
	return sqsClient
}