使用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/whatever
和http://target-host-2.com/route2/whatever
。