LocalStack TestContainer + AWS SQS + Spring Boot -> Невозможно выполнить HTTP-запрос

У меня есть интересная проблема, буду рад любой помощи.

Когда я пытаюсь создать очередь, клиент AmazonSQS создает очередь, но когда я пытаюсь отправить сообщения, он выдает это исключение. Невозможно выполнить HTTP-запрос.

КОД:

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Testcontainers
public class AwsSqsTest {
private static final Network network = Network.newNetwork();
@Container
static final LocalStackContainer localStack = new LocalStackContainer(
DockerImageName.parse("localstack/localstack:latest"))
.withNetwork(network)
.withNetworkAliases("notthis", "localstack")
.withServices(Service.SQS);

    static AmazonSQS amazonSQSClient;
    final String SqsURL = "http://sqs.us-east-1.localstack:4566/000000000000/";
    
    @BeforeAll
    static void beforeAll() {
        String localStackEndpoint = localStack.getEndpoint().toString();
        amazonSQSClient = amazonSQS(
                localStack.getAccessKey(),
                localStack.getSecretKey(),
                localStack.getRegion(),
                localStackEndpoint
        );
    }
    
    static AmazonSQS amazonSQS(String accessKey, String secretKey, String region, String stackEndpoint) {
        var basicAWSCredentials = new BasicAWSCredentials(accessKey, secretKey);
        var endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(stackEndpoint, region);
        var credentialsProvider = new AWSStaticCredentialsProvider(basicAWSCredentials);
        return AmazonSQSClientBuilder.standard()
                .withEndpointConfiguration(endpointConfiguration)
                .withCredentials(credentialsProvider)
                .build();
    }
    
    @Test
    @Order(1)
    void testSQSClientInitialization() {
        assertNotNull(amazonSQSClient);
    }
    
    @ParameterizedTest
    @ValueSource(strings = {"news", "trends"})
    @Order(2)
    void createQueueTest(String queueName) {
        amazonSQSClient.createQueue(queueName);
    
        var queues = amazonSQSClient.listQueues().getQueueUrls();
    
        assertTrue(queues.contains(SqsURL + queueName));
    }
    
    
    @ParameterizedTest
    @MethodSource("saveToQueue")
    @Order(3)
    void saveToQueue(String queueName, String data) {
        String url = SqsURL + queueName;
        amazonSQSClient.sendMessage(url, data);
    
        var messages = amazonSQSClient.receiveMessage(url);
    
        assertEquals(data, messages.getMessages().getFirst().getBody());
    }
    
    Stream<Arguments> saveToQueue() {
        return Stream.of(
                arguments("trends", "{}"),
                arguments("news", "{}")
        );
    }

}

ЖУРНАЛЫ:


Unable to execute HTTP request: sqs.us-east-1.localstack
com.amazonaws.SdkClientException: Unable to execute HTTP request: sqs.us-east-1.localstack
...
Caused by: java.net.UnknownHostException: sqs.us-east-1.localstack
...

sqs.us-east-1.localstack
java.net.UnknownHostException: sqs.us-east-1.localstack
...

введите сюда описание изображения

Я пробовал использовать другие реализации AmazonSQS и использовать документацию, но ничего не помогло;(

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
224
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте следующие переменные окружения в LocalStackContainer.

.withEnv("LOCALSTACK_HOST", "localhost.localstack.cloud")
.withEnv("SQS_ENDPOINT_STRATEGY", "dynamic")

LOCALSTACK_HOST сохраняет хост для внутренней связи LocalStack и SQS_ENDPOINT_STRATEGY разрешает хост от клиента.

Другие вопросы по теме