#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