使用wiremock-docker代理多个URL

我有一个利用微服务的项目。 我正在尝试使用wire-mock来创build一个testing环境。

如何使用docker-compose代理多个URL。

这是我的docker-compose文件。

networks: ft-simulator: external: false services: app: depends_on: - nginx environment: - SPRING_PROFILES_ACTIVE=simulator - JAVA_FLAGS=-Dhttp.proxyHost=wiremock -Dhttp.proxyPort=8080 healthcheck: interval: 1m retries: 3 test: - CMD - curl - -f - http://localhost:8080/health timeout: 10s image: ft-simulator:latest ports: - "8080:8080" networks: ft-simulator: aliases: - bcp nginx: image: nginx ports: - "80:80" - "443:443" networks: - ft-simulator wiremock: image: rodolpheche/wiremock:2.8.0-alpine networks: - ft-simulator ports: - "8081:8080" volumes: - "$PWD/stubs:/home/wiremock" command: ["--proxy-all=http://bcp:8080, http://www.google.com"] version: '3.1' 

Google只是一个占位符,直到启动。

当我运行docker-compose时,出现以下错误

 crp11070m:wiremock-simulation john.hamlett$ docker logs -f wiremocksimulation_wiremock_1 Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://bcp:8080, http://www.google.com at java.net.URI.create(URI.java:852) at com.github.tomakehurst.wiremock.standalone.CommandLineOptions.proxyHostHeader(CommandLineOptions.java:274) at com.github.tomakehurst.wiremock.core.WireMockApp.buildStubRequestHandler(WireMockApp.java:123) at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:72) at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.run(WireMockServerRunner.java:65) at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.main(WireMockServerRunner.java:113) Caused by: java.net.URISyntaxException: Illegal character in authority at index 7: http://bcp:8080, http://www.google.com at java.net.URI$Parser.fail(URI.java:2848) at java.net.URI$Parser.parseAuthority(URI.java:3186) at java.net.URI$Parser.parseHierarchical(URI.java:3097) at java.net.URI$Parser.parse(URI.java:3053) at java.net.URI.<init>(URI.java:588) at java.net.URI.create(URI.java:850) ... 5 more 

无法使用--proxy-all参数同时代理多个目标URL。

你可以做的是根据传入的请求,通过为每个路由创build一个代理响应的存根映射来改变代理目标

路线1:

 { "request": { "urlPattern": "/route1/.*" }, "response": { "proxyBaseUrl" : "http://target-host-1.com" } } 

路线2:

 { "request": { "urlPattern": "/route2/.*" }, "response": { "proxyBaseUrl" : "http://target-host-2.com" } } 

请注意,URLpath部分将被添加到URL,所以你最终将代理请求http://target-host-1.com/route1/whateverhttp://target-host-2.com/route2/whatever