当前位置: 首页 > 知识库问答 >
问题:

Zuul通过外部代理服务器路由请求

方永贞
2023-03-14

我们当前的项目需求是将一些请求路由到第三方外部api服务器。为此,我们使用的是基于spring祖尔的路由器服务。

zuul:
  routes
    test:
      path: /test/**
      serviceId: test
      url: http://my.api.server.com
    test2:
      path: /test2/**
      serviceId: test2
      url: http://my.api.server.com // but through an external proxy

现在的要求是,对于某些endpoint,到外部api服务器的请求已经通过不属于我们的外部代理服务器路由,

如何通过卷曲完成此操作:

curl <external_api_server>/api/v1/user -k \
  -x tntqyhnhjym.sandbox.verygoodproxy.com:8080 \
  -H "Content-type: application/json" \
  -d '{"card_number": "tok_sandbox_t8VSoovCuHA779eJGZhKvg", ... }'

-x 通过给定的代理重定向请求。如何通过spring-祖尔服务器做到这一点?

我有一条线索?https://github.com/spring-cloud/spring-cloud-netflix/issues/2320。不干净,因为我需要扩展zuulsimplehostroutingfilter

共有1个答案

陈瀚玥
2023-03-14

您可以设置一个反向代理--它被配置为通过代理。您的反向代理将以使用外部代理的参数(例如,在Java或nodejs中)启动。这个反向代理将是一个不同的进程,它将通过所需的代理传递所有请求。

您可以通过设置第二个zuul代理应用程序或通过nodejs反向代理(express或node-http-proxy)来实现。

因此,如果您使用zuul,您将使用以下内容制作第二个应用程序:

   test2:
      path: /proxied-test2/**
      serviceId: test2
      url: http://my.api.server.com 

然后,您将使用代理的参数在同一台服务器上并在特定端口(例如9200)上启动该服务器。

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888

在您的原始应用程序中,您将把您的路由替换为下面的路由。

zuul:
  routes
    test:
      path: /test/**
      serviceId: test
      url: http://my.api.server.com
    test2:
      path: /test2/**
      serviceId: test2
      url: http://localhost:9200/proxied-test2/

您可以设置一个代理服务器,然后设置一些例外情况和规则,说明哪些请求应该通过代理路由,哪些请求应该在没有代理的情况下工作。

第二步是配置您的应用程序以使用步骤1中指定的本地代理服务器。为此,您可以使用以下命令行参数:

-Dhttp.proxyHost=localhost -Dhttp.proxyPort=8888

我在过去为代理服务器配置了排除列表,但从未配置/编写包含列表的脚本。在您的情况下,使用include列表更有意义,这样我就可以测试可脚本/可编程的代理服务器,例如:

  • https://mitmproxy.org/-通过mitmdump编写脚本
 类似资料:
  • Zuul Server是一个网关应用程序,可处理所有请求并执行微服务应用程序的动态路由。 Zuul服务器也称为边缘服务器。 例如, /api/user映射到用户服务,/ api/products映射到产品服务,Zuul Server将请求动态路由到相应的后端应用程序。 在本章中,我们将详细介绍如何在Spring Boot中创建Zuul Server应用程序。 创建Zuul服务器应用程序 Zuul

  • 我有两台机器(具有相同的应用程序)注册到eureka服务器。所有对这些服务的请求都通过zuul代理。 我对后端服务的application.properties是: 我的申请。我的zuul代理的属性是: 我有两个问题: > http://localhost:9090/api/by-service/customer/1 http://localhost:9090/api/core/customer/

  • 我试图通过Spring云NetflixZuul路由现有服务。 我有一个现有的服务,网址如下:, http://localhost:3080/query-service/getquery/1 开箱即用的zuul I可以路由到如下服务:localhost:9000/queryservice id/queryservice/getquery/1,当服务在服务注册中心注册时,“queryservice i

  • 路由在微服务体系结构的一个组成部分。例如,/可以映射到您的Web应用程序,/api/users映射到用户服务,并将/api/shop映射到商店服务。Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。 Netflix使用Zuul进行以下操作: 认证 洞察 压力测试 金丝雀测试 动态路由 服务迁移 负载脱落 安全 静态响应处理 主动/主动流量管理 Zuul的规则引擎允许基本上写任何JV

  • 我正在研究spring MVC,并使用Apache camel来集成外部服务。我想使用Apache Camel route进行Webservice调用。 就像我的本地REST服务(http://localhostsmiliex.xx:8080/users)从外部REST服务获取数据(http://xxx:000/users)并希望通过路由获取外部数据。 哪个Apache组件适合Jetty或prod

  • null 例如,将返回JSON格式的用户。 用户应用程序也有一个HTTPendpoint,它应该将请求转发给其他应用程序--让我们将其中一个称为作业应用程序。 此endpoint为。例如, 请注意,初始请求到达用户应用程序,然后它被转发到作业应用程序。 我把我思考的一些方法。也许你过去做过类似的事情,所以你可以分享你这样做的经验。甚至改进我的一种方法。 我将使用映射在用户应用程序中创建 null