Spring集成AWS SQS消息未接收问题排查及CLI调试咨询
问题分析与解决方案
一、接收不到消息的可能原因
队列名称大小写不匹配
代码中定义的队列名称是messengerQueue(小写开头),但实际创建的队列是MessengerQueue(大写开头)。SQS队列名称是大小写敏感的,这会导致监听器监听的队列和实际存在的队列不一致,无法收到消息。SQS客户端配置未指向LocalStack
检查SqsTemplate的配置是否正确指向LocalStack的SQS端点(http://sqs.us-east-1.localhost.localstack.cloud:4566)。如果Spring默认使用AWS官方端点,消息会发送到真实AWS而非LocalStack的队列,自然无法被本地监听器接收。缺少必要的注解开启功能
确保Spring Boot应用主类上添加了@EnableSqs和@EnableScheduling注解:@EnableSqs用来开启SQS监听器的自动配置@EnableScheduling用来启动定时任务(你的publish方法才会定时发送消息)
日志级别未开启
代码中使用了log.debug和log.trace,如果应用日志级别高于DEBUG(比如默认INFO),你看不到这些日志,可能误以为消息没发送/接收。需要在application.yml或application.properties中配置:logging.level.你的包路径=DEBUG
二、使用AWS CLI调试SQS队列
可以用AWS CLI调试,具体操作如下:
1. 验证队列存在(修正你的命令)
你之前的命令有误,正确的列出队列命令是:
aws sqs list-queues --profile localstack --region us-east-1
2. 接收队列中的消息
使用receive-message命令,指定队列URL即可:
aws sqs receive-message \ --profile localstack \ --region us-east-1 \ --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/MessengerQueue \ --max-number-of-messages 1
--max-number-of-messages:指定一次接收的最大消息数,范围1-10- 如果队列中有消息,会返回包含消息内容、消息ID等信息的JSON;如果没有消息,会返回空结果。
3. 额外调试命令(可选)
- 发送测试消息:
aws sqs send-message \ --profile localstack \ --region us-east-1 \ --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/MessengerQueue \ --message-body "test payload from CLI"
- 查看队列属性:
aws sqs get-queue-attributes \ --profile localstack \ --region us-east-1 \ --queue-url http://sqs.us-east-1.localhost.localstack.cloud:4566/000000000000/MessengerQueue \ --attribute-names All
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

