Amazon SQS with Spring Boot Using Spring Cloud AWS

1 min read

Amazon SQS with Spring Boot Using Spring Cloud AWS

Amazon SQS (Simple Queue Service) is a fully managed message queuing service that enables decoupled and scalable microservice communication. Integrating SQS with Spring Boot becomes seamless using Spring Cloud AWS, which provides auto-configuration and abstraction for AWS services.


Prerequisites

  • A basic Spring Boot project (Java 17+ recommended)
  • An AWS account with SQS access
  • An SQS Queue created (standard or FIFO)
  • Maven or Gradle build tool

1. Add Required Dependencies

Add the following to your pom.xml:

<dependencies>
    <dependency>
        <groupId>io.awspring.cloud</groupId>
        <artifactId>spring-cloud-starter-aws-messaging</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.awspring.cloud</groupId>
            <artifactId>spring-cloud-aws-dependencies</artifactId>
            <version>3.0.2</version> <!-- Check for latest version -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. Configure AWS Credentials

Use application.yml or application.properties:

cloud:
  aws:
    region:
      static: us-east-1
    credentials:
      access-key: YOUR_AWS_ACCESS_KEY
      secret-key: YOUR_AWS_SECRET_KEY
    sqs:
      enabled: true

Or use IAM roles if deploying on AWS infrastructure (preferred for production).


3. Send Messages to SQS

MessageSenderService.java

package com.example.sqs.service;

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;

@Service
@RequiredArgsConstructor
public class MessageSenderService {

    private final QueueMessagingTemplate queueMessagingTemplate;

    @Value("${cloud.aws.sqs.queue-name}")
    private String queueName;

    public void send(String message) {
        queueMessagingTemplate.send(queueName, MessageBuilder.withPayload(message).build());
    }
}

4. Receive Messages from SQS

MessageListener.java

package com.example.sqs.listener;

import org.springframework.cloud.aws.messaging.listener.annotation.SqsListener;
import org.springframework.stereotype.Component;

@Component
public class MessageListener {

    @SqsListener("${cloud.aws.sqs.queue-name}")
    public void receiveMessage(String message) {
        System.out.println("Message received from SQS: " + message);
    }
}

5. Controller to Trigger Send

SqsController.java

package com.example.sqs.controller;

import com.example.sqs.service.MessageSenderService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/sqs")
@RequiredArgsConstructor
public class SqsController {

    private final MessageSenderService senderService;

    @PostMapping("/send")
    public String send(@RequestBody String message) {
        senderService.send(message);
        return "Message sent to SQS!";
    }
}

6. Sample application.yml

server:
  port: 8080

cloud:
  aws:
    region:
      static: us-east-1
    credentials:
      access-key: YOUR_AWS_ACCESS_KEY
      secret-key: YOUR_AWS_SECRET_KEY
    sqs:
      queue-name: your-queue-name

Optional: Use LocalStack for Local Testing

Add dependency:

<dependency>
    <groupId>cloud.localstack</groupId>
    <artifactId>localstack-utils</artifactId>
    <version>0.2.10</version>
</dependency>

Spin up a local SQS using Docker:

docker run -d -p 4566:4566 localstack/localstack

Then adjust application.yml to use localhost:4566.


Summary

With Spring Cloud AWS:

  • You can send and receive SQS messages using Spring-native patterns.
  • No need to manually poll or manage the queue lifecycle.
  • Great for building event-driven or asynchronous microservices.

🤞 Never miss a story from us, get weekly updates to your inbox!

Leave a Reply

Your email address will not be published. Required fields are marked *