2017-10-13 30 views
0

我有一个利用微服务的项目。我正在尝试使用wire-mock来创建一个测试环境。使用wiremock-docker代理多个URL

如何使用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只是一个占位符,直到它启动。

当我跑码头工人,组成了我得到以下错误

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 

回答

0

这是不可能的代理到一个以上的目标URL在使用--proxy-all参数的同时。

您可以做的是根据传入请求,通过为每个路由创建带有代理响应的存根映射来改变代理目标,例如,

路线1:

{ 
    "request": { 
     "urlPattern": "/route1/.*" 
    }, 

    "response": { 
     "proxyBaseUrl" : "http://target-host-1.com" 
    } 
} 

路线2:

{ 
    "request": { 
     "urlPattern": "/route2/.*" 
    }, 

    "response": { 
     "proxyBaseUrl" : "http://target-host-2.com" 
    } 
} 

注意,URL路径部分将被添加到URL,所以你用代理到http://target-host-1.com/route1/whateverhttp://target-host-2.com/route2/whatever请求结束。

+0

谢谢,是否有可能嘲笑外部依赖?比如我从http://www.sweetviz.com/bestimage.jpg抓取图片?我有一个将JSON返回给我的应用程序的外部服务。如果不可能,我可以将其内部化。 –