J'essaie de faire fonctionner Spring Cloud avec la messagerie à l'aide de la configuration automatique.
Mon fichier de propriétés contient:
cloud.aws.credentials.accessKey=xxxxxxxxxx
cloud.aws.credentials.secretKey=xxxxxxxxxx
cloud.aws.region.static=us-west-2
Ma classe de configuration est la suivante:
@EnableSqs
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Ma classe d'écoute:
@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());
}
}
Cependant, lorsque je lance cela. J'obtiens l'erreur suivante:
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
Quelqu'un d'autre a traversé ça? Toute aide serait grandement appréciée
Cette erreur signifie que la file d'attente spécifiée orderQueue n'existe pas sur la région s-west-2. Il suffit de le créer et cela devrait fonctionner.
Btw, il n'est pas nécessaire d'ajouter @ EnableSqs lors de l'utilisation @ EnableAutoConfiguration.
La réponse d'Alain est correcte. Cette erreur indique que la file d'attente n'existe pas dans la région us-west-2. L'une des raisons pourrait être que le kit AWS Java SDK utilise us-east-1 comme région par défaut. D'après la documentation AWS http://docs.aws.Amazon.com/ Java-sdk/latest/developer-guide/Java-dg-region-selection.html
Le kit SDK AWS pour Java utilise us-east-1 comme région par défaut si vous ne spécifiez pas de région dans votre code. Cependant, AWS Management Console utilise us-west-2 par défaut. Par conséquent, lorsque vous utilisez AWS Management Console en conjonction avec votre développement, veillez à spécifier la même région dans votre code et dans la console.
Vous pouvez définir la région ou le point de terminaison spécifiquement dans le client à l'aide des méthodes setRegion()
ou setEndpoint()
de AmazonSQSClient
object. Voir http://docs.aws.Amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/AmazonSQS.html#setEndpoint-Java.lang.String-
Pour une liste des régions et des points de terminaison, voir http://docs.aws.Amazon.com/general/latest/gr/rande.html#sqs_region
Essayez d'utiliser l'URL de la file d'attente au lieu du nom.
J'ai impacté le même problème en essayant de get-queue-url en utilisant la ligne de commande. Regardez ce que j'avais:
A client error (AWS.SimpleQueueService.NonExistentQueue) occurred when calling the GetQueueUrl operation: The specified queue does not exist for this wsdl version.
J'ai dû exécuter ceci:
$aws configure
Et sous l'invite "Nom de région par défaut [...]:", entrez la région à laquelle appartient ma file d'attente. Ensuite, l'erreur a disparu.
Alors revérifiez vos configurations;)