- запускаем тестовый контейнер
- создаем SQS-клиент
- использовать этот клиент для создания очереди
- попытаться найти очередь ARN
http://sqs.us-east-1.localhost:4566/000 ... 0/my-queue
Однако попытка запросить атрибуты очереди приводит к следующему:
java.net.UnknownHostException: sqs.us-east-1.localhost
public class Main {
private static final LocalStackContainer localStack =
new LocalStackContainer(DockerImageName.parse(
"localstack/localstack:3.1")).withServices(SQS);
public static void main(String[] args) {
localStack.start();
// create SQS client
AmazonSQSAsync sqs = AmazonSQSAsyncClientBuilder
.standard()
.withEndpointConfiguration(new EndpointConfiguration(
localStack.getEndpointOverride(SQS).toString(),
localStack.getRegion()))
.withCredentials(new AWSStaticCredentialsProvider(
new BasicAWSCredentials(
localStack.getAccessKey(),
localStack.getSecretKey())))
.build();
// create a new queue
String url = sqs.createQueue("my-queue").getQueueUrl();
// get ARN of new queue
String arn = sqs.getQueueAttributes(url, List.of("QueueArn"))
.getAttributes().get("QueueArn");
}
}
Приведенный выше код является частью проекта maven со следующими (и только этими) зависимостями:
com.amazonaws
aws-java-sdk-sqs
1.12.646
org.testcontainers
localstack
1.19.4
Я не могу понять, почему createQueue() работает, а getQueueAttributes() — нет. Что я здесь делаю не так?
[В «реальном» коде я не могу изменить версию aws-java-sdk-sqs, но я рад измените версии TestContainers и LocalStack, если это поможет]
Обновление: исправлено по предложению Трау (см. ниже). Необходимо использовать последнюю версию LocalStack и установить для SQS_ENDPOINT_STRATEGY значение динамическое:
LocalStackContainer localStack =
new LocalStackContainer(DockerImageName.parse("localstack/localstack:latest"))
.withEnv("SQS_ENDPOINT_STRATEGY", "dynamic")
.withServices(SQS);
Подробнее здесь: https://stackoverflow.com/questions/779 ... containers