Spring Aws SQS 不连接到本地堆栈



我正在尝试使用Spring AWS列出SQS队列,但它正在抛出此消息异常。

20121-09-30 10:41:15.273 WARN 25992—[main] i.a.c.m.l.SimpleMessageListenerContainer:忽略名为'EVENTS_DEV'的队列:队列不存在。嵌套异常是com.amazonaws.services.sqs.model.QueueDoesNotExistException:指定的队列EVENTS_DEV在此wsdl版本中不存在。(服务:AmazonSQS;状态码:404;错误代码:AWS.SimpleQueueService.NonExistentQueue;请求ID: iknnyb2icctdt6dxq15rap5jcy92nvg1hollzk69wjwmbxz1yifki;代理:null)

如果我使用was cli获取队列属性队列就在那里

aws --endpoint http://localhost:4566 sqs get-queue-attributes --queue-url  http://localhost:4566/000000000000/EVENTS_DEV
{
"Attributes": {
"ApproximateNumberOfMessages": "0",
"ApproximateNumberOfMessagesDelayed": "0",
"ApproximateNumberOfMessagesNotVisible": "0",
"CreatedTimestamp": "1633006230.73685",
"DelaySeconds": "0",
"LastModifiedTimestamp": "1633006230.73685",
"MaximumMessageSize": "262144",
"MessageRetentionPeriod": "345600",
"QueueArn": "arn:aws:sqs:sa-east-1:000000000000:EVENTS_DEV",
"ReceiveMessageWaitTimeSeconds": "0",
"VisibilityTimeout": "30"
}
}

这是我的监听代码

@Component
public class Listener {
@SqsListener(value = "${aws.queues.event}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void listen(String message, Acknowledgment acknowledgment) throws ExecutionException, InterruptedException {
System.out.printf("Message received %s%n", message );
acknowledgment.acknowledge().get();
}
}

这是我的配置

@Configuration
public class AWSConfig {
@Bean
public QueueMessagingTemplate queueMessagingTemplate(AmazonSQSAsync amazonSQSAsync) {
return new QueueMessagingTemplate(amazonSQSAsync);
}
@Bean
public NotificationMessagingTemplate notificationMessagingTemplate(
AmazonSNS amazonSNS) {
return new NotificationMessagingTemplate(amazonSNS);
}
}

最后我的属性文件

cloud.aws.sns.endpoint=http://localhost:4566
cloud.aws.sns.region=sa-east-1
cloud.aws.sqs.endpoint=http://localhost:4566
cloud.aws.sqs.region=sa-east-1
cloud.aws.credentials.instanceProfile=false
cloud.aws.credentials.useDefaultAwsCredentialsChain=false
cloud.aws.stack.auto=false
aws.queues.event=EVENTS_DEV

要解决这个问题,您应该确保在侦听器初始化之前创建队列。

最好在SQS客户端初始化期间创建队列

AmazonSQS sqsClient = AmazonSQSAsyncClientBuilder.standard().build();
sqsClient.createQueue(new CreateQueueRequest("test-queue"));

最新更新