Указанная очередь не существует - AWS.SimpleQueueService.NonExistentQueue с Spring-Boot - PullRequest
0 голосов
/ 11 октября 2019

Я не могу подключить @SqsListener в приложении с весенней загрузкой. Выдает исключение AWS.SimpleQueueService.NonExistentQueue.

Я прошел через вопрос: Указанная очередь не существует и, насколько я знаю, все конфигурации верны.

@Component
public class SQSListenerImpl{
    @SqsListener(value = Constants.SQS_REQUEST_QUEUE, deletionPolicy = SqsMessageDeletionPolicy.NEVER)
    public void listen(String taskJson, Acknowledgment acknowledgment, @Headers Map<String, String> headers) throws ExecutionException, InterruptedException {
        //stuff
    }

    @PostConstruct
    private void init(){
        final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();
        LOGGER.info("Listing all queues in your account.\n");
        for (final String queueUrl : sqs.listQueues().getQueueUrls()) {
            LOGGER.info("  QueueUrl: " + queueUrl);
        }
    }
}

application.properties

cloud.aws.stack.auto=false
cloud.aws.region.static=ap-southeast-1
logging.level.root=INFO

Журналы из вышеуказанного кода:

[requestId: MainThread] [INFO] [SQSListenerImpl] [main]   QueueUrl: https://sqs.ap-southeast-1.amazonaws.com/xxxxx/hello-world
[requestId: MainThread] [INFO] [SQSListenerImpl] [main]   QueueUrl: https://sqs.ap-southeast-1.amazonaws.com/xxxxx/some-name2
[requestId: MainThread] [INFO] [SQSListenerImpl] [main]   QueueUrl: https://sqs.ap-southeast-1.amazonaws.com/xxxxx/some-name3
[requestId: MainThread] [WARN] [SimpleMessageListenerContainer] [main] Ignoring queue with name 'hello-world': The queue does not exist.; 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: 3c0108aa-7611-528f-ac69-5eb01fasb9f3)
[requestId: MainThread] [INFO] [Http11NioProtocol] [main] Starting ProtocolHandler ["http-nio-8080"]
[requestId: MainThread] [INFO] [TomcatWebServer] [main] Tomcat started on port(s): 8080 (http) with context path ''
[requestId: MainThread] [INFO] [Startup] [main] Started Startup in 11.391 seconds (JVM running for 12.426)

Используемые учетные данные Aws находятся в каталоге ~/.aws/.

Теперь мой вопрос: если sqs.listQueues() может видеть очередь, то почему не может @SqsListener? Я что-то упускаю или делаю что-то не так?

1 Ответ

0 голосов
/ 11 октября 2019

Вот что я делаю с Spring Cloud.

Используя SPEL, я прикрепляю значение из своего application.properties к аннотации @SqsListener, как это

@SqsListener(value = "#{queueConfiguration.getQueue()}", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)

Стоит отметить, что вы используете полный путь HTTPS дляочередь.

Для всех локальных разработок я использую "localstack" и использую локальную реализацию SQS, но тот же код применяется при развертывании в ECS. Другой момент, на который следует обратить внимание, заключается в том, что роль или экземпляр должны иметь возможность получать сообщения через IAM, чтобы это произошло.

...