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
?
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";