Ответ 1
Эта ошибка означает, что указанный заказ queue orderQueue не существует в области us-west-2. Просто создайте его, и он должен работать.
Btw, нет необходимости добавлять @EnableSqs при использовании @EnableAutoConfiguration.
Я пытаюсь настроить Spring Cloud для работы с сообщениями с помощью автоматической настройки.
Мой файл свойств содержит:
cloud.aws.credentials.accessKey=xxxxxxxxxx
cloud.aws.credentials.secretKey=xxxxxxxxxx
cloud.aws.region.static=us-west-2
Мой класс конфигурации выглядит следующим образом:
@EnableSqs
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Мой класс слушателя:
@RestController
public class OrderListener {
@MessageMapping("orderQueue")
public void orderListener(Order order){
System.out.println("Order Name " + order.getName());
System.out.println("Order Url" + order.getUrl());
}
}
Тем не менее, когда я запускаю это. Я получаю следующую ошибку:
org.springframework.context.ApplicationContextException: Failed to start bean 'simpleMessageListenerContainer'; nested exception is org.springframework.messaging.core.DestinationResolutionException: The specified queue does not exist for this wsdl version. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request ID: cc8cb199-be88-5993-bd58-fca3c9f17110); nested exception is com.amazonaws.services.sqs.model.QueueDoesNotExistException: The specified queue does not exist for this wsdl version. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request ID: cc8cb199-be88-5993-bd58-fca3c9f17110)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:770)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:140)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
at com.releasebot.processor.Application.main(Application.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: org.springframework.messaging.core.DestinationResolutionException: The specified queue does not exist for this wsdl version. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request ID: cc8cb199-be88-5993-bd58-fca3c9f17110); nested exception is com.amazonaws.services.sqs.model.QueueDoesNotExistException: The specified queue does not exist for this wsdl version. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request ID: cc8cb199-be88-5993-bd58-fca3c9f17110)
at org.springframework.cloud.aws.messaging.support.destination.DynamicQueueUrlDestinationResolver.resolveDestination(DynamicQueueUrlDestinationResolver.java:81)
at org.springframework.cloud.aws.messaging.support.destination.DynamicQueueUrlDestinationResolver.resolveDestination(DynamicQueueUrlDestinationResolver.java:37)
at org.springframework.messaging.core.CachingDestinationResolverProxy.resolveDestination(CachingDestinationResolverProxy.java:88)
at org.springframework.cloud.aws.messaging.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:300)
at org.springframework.cloud.aws.messaging.listener.SimpleMessageListenerContainer.start(SimpleMessageListenerContainer.java:38)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
... 18 common frames omitted
Кто-нибудь еще сталкивался с этим? Любая помощь будет принята с благодарностью
Эта ошибка означает, что указанный заказ queue orderQueue не существует в области us-west-2. Просто создайте его, и он должен работать.
Btw, нет необходимости добавлять @EnableSqs при использовании @EnableAutoConfiguration.
Попробуйте использовать URL-адрес очереди вместо имени.
Ответ Алена правильный. Эта ошибка указывает, что очередь не существует в регионе us-west-2. Одна из причин может заключаться в том, что AWS Java SDK использует нас-east-1 как область по умолчанию. Из документации AWS http://docs.aws.amazon.com/java-sdk/latest/developer-guide/java-dg-region-selection.html
AWS SDK для Java использует us-east-1 как область по умолчанию, если вы не указали регион в своем коде. Однако в AWS Management Console используется us-west-2 по умолчанию. Поэтому при использовании Консоли управления AWS в сочетании с вашей разработкой обязательно укажите тот же регион как в вашем коде, так и в консоли.
Вы можете установить область или конечную точку конкретно в клиенте с помощью методов setRegion()
или setEndpoint()
объекта AmazonSQSClient
. См. http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/AmazonSQS.html#setEndpoint-java.lang.String-
Список регионов и конечных точек см. http://docs.aws.amazon.com/general/latest/gr/rande.html#sqs_region
Я затронул ту же проблему, пытаясь получить-queue-url, используя командную строку. Посмотрите, что у меня было:
A client error (AWS.SimpleQueueService.NonExistentQueue) occurred when calling the GetQueueUrl operation: The specified queue does not exist for this wsdl version.
Придется запустить это:
$aws configure
И под подсказкой 'Имя региона по умолчанию [...]:' ввел область, к которой принадлежит моя очередь. Затем ошибка исчезла.
Итак, дважды проверьте свои конфиги;)
Я вижу ту же проблему. Когда я запускаю приложение локально, оно находит очередь. Но происходит сбой с той же ошибкой на AWS.
Большинство ответов показывают, что регион был неправильным. Но не должен ли cloud.aws.region.static этот регион установить регион?