Search code examples
amazon-web-servicesspring-cloudamazon-sqs

spring aws: sqs messages not received


Here my straightforward code:

@Component
@Slf4j
@RequiredArgsConstructor
public class SQSEventsService {

    private static final String MESSENGER_QUEUE = "messengerQueue";

    private final SqsTemplate template;

    @SqsListener(MESSENGER_QUEUE)
    public void listen(String message) {
        log.debug("Message received");
        log.trace("Message received: {}", message);
    }

    @Scheduled(fixedDelay = 1000)
    public void publish() {
        log.debug("Sending message");
        this.template.send(MESSENGER_QUEUE, "payload string");
        log.debug("Message sent");
    }
}

My service is running but I don't quite figure out why I don't receive messages.

Here my queues:

$ aws sqs list-queue --profile localstack --region us-east-1:

{
  "QueueUrls": [
    "http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/MessengerQueue"
  ]
}

Any ideas?

Could I debug sqs queue using aws cli? I mean, how could I receive messages from sqs queue using aws-cli?


Solution

  • Yes you can receive messages from sqs queue using aws-cli. This example receives up to 10 available messages, returning all available attributes.

    Command:

    aws sqs receive-message --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/MessengerQueue --attribute-names All --message-attribute-names All --max-number-of-messages 10
    

    Doc : https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html

    Also, your queue name in AWS is "MessengerQueue" (with a capital "M") but in your code, you are trying to listen and send to "messengerQueue" (with a small "m"). AWS SQS queue names are case-sensitive.

    So, you need to change your code to:

    private static final String MESSENGER_QUEUE = "MessengerQueue";