AWS SQS Java SDK: переопределение конечной точки с помощью пути

#java #amazon-web-services #aws-sdk #amazon-sqs #aws-sdk-java-2.0

#java #Amazon-web-services #aws-sdk #amazon-sqs #aws-sdk-java-2.0

Вопрос:

Я использую AWS SDK версии 2.14.26.

Я хочу иметь возможность указывать на свой симулятор для AWS SQS, который позволяет мне делать необычные вещи, такие как ошибки возврата, задержки ответов и т. Д. У меня есть ElasticMQ, но я также хочу делать необычные вещи, для которых у меня есть веб-приложение, которое имитирует множество вещей, одной из которых может быть SQS.

Мое веб-приложение размещено по адресу http://localhost:8088/simulators/v1/aws/sqs . Я надеюсь, что тогда я мог бы ожидать, что sdk выполнит любые запросы API, начиная с этого пути https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-making-api-requests.html

Например,

 https://sqs.eu-west-2.amazonaws.com/   
?Action=CreateQueue
amp;DefaultVisibilityTimeout=40
amp;QueueName=MyQueue
amp;Version=2012-11-05
amp;AUTHPARAMS
  

Станет

 http://localhost:8088/simulators/v1/aws/sqs   
?Action=CreateQueue
amp;DefaultVisibilityTimeout=40
amp;QueueName=MyQueue
amp;Version=2012-11-05
amp;AUTHPARAMS
  

Но когда я создаю клиента и пытаюсь получить очередь:

 SqsClient client = SqsClient.builder()
                .region(Region.of("SIMULATOR"))
                .credentialsProvider((()->AwsBasicCredentials.create("ignored", "bySim")))
                .endpointOverride(new URI("http://localhost:8088/simulators/v1/aws/sqs"))
                .build();
client.getQueueUrl(GetQueueUrlRequest.builder()
      .queueName("test123")
      .build());
  

Я получаю

software.amazon.awssdk.services.sqs.model.SqsException: null (Service: Sqs, Status Code: 404, Request ID: null, Extended Request ID: null)

Глядя на wireshark, кажется, что он просто указывает на /, а не на конечную точку, которую я хотел, что привело к получению 404

 1287    2020-10-12 16:07:10.982955272   127.0.0.1   127.0.0.1   HTTP    801 POST / HTTP/1.1  (application/x-www-form-urlencoded)
[Full request URI: http://localhost:8088/]
  

Есть ли способ заставить aws sdk запускаться с пути /simulators/v1/aws/sqs ? Потому что я хотел бы, чтобы мое приложение-симулятор могло имитировать may API и не должно было использовать корневой путь.

Комментарии:

1. X-также опубликовано в aws fourms: forums.aws.amazon.com/thread.jspa?threadID=329509

2. Я смог обойти проблему, создав обратный прокси. Я использовал github.com/tomkraljevic/jetty-embed-reverse-proxy-example/blob/… Мне пришлось внести несколько изменений в мою версию jetty:

3. 1. Используйте ServerConnector вместо соединителя сокета ServerConnector http = новый ServerConnector(сервер); http.setPort(8089); http.setHost(«локальный хост»);

4. 2. Измените «ProxyTo» на «proxyTo»

5. 3. Очевидно, измените URL-адрес proxyTo на http://localhost:8088/simulators/v1/aws/sqs