如何将部分请求转发到 Clojure 中的另一台服务器?

How can I forward part of requests to another server in Clojure?

总结

我正在开发一个类似于 Clojure 中的代理的服务器,以 pedestal service + lein 作为基础:

编码很容易,关于如何提供路由的资源很多,
但是我找不到任何简单的方法,如何将 Clojure 基座
服务与转发路由一起使用

例子

设置

我一直在尝试的

示例:

(ns your-ns
  (:require [tailrecursion.ring-proxy :refer [wrap-proxy]]))

(def app
  (-> routes
      (wrap-proxy "/remote" "http://some.remote.server/remote")))

我只是无法将基座的路由系统与此代理解决方案混合使用,路由不同,看起来,也许我需要用不同的方法来实现

免责声明

  1. 我知道基本转发可以通过 nginx、varnish 和任何其他负载均衡器完成。但我的想法是填充来自不同服务器的数据,从而简化客户端
  2. 我是 Clojure 的新手,您可能已经注意到了。而我运行没办法了,因为google关于那个也很复杂,有时候没用

您正在创建一个接收请求的服务器。在您的服务器中,您可以充当向另一台服务器发出请求的客户端。然后,您可以将收到的响应修改或聚合到发送给原始客户端的响应中。

请参阅 the clj-http library 提出请求。 Clojure 工具箱列出了许多其他选项。

您可能还对this list of documentation resources感兴趣。

看看 ring-request-proxy 而不是 here。来自文档:

(ns myapp.core
  (:require [ring-request-proxy.core :as proxy])

; Middleware format: Delegates request to handler when request can't be forwarded
(def app (-> not-found-handler
             (proxy/proxy-request {:identifier-fn :server-name
                                   :host-fn {"my-server" "http://my-internal-server"}})))

您应该将其设置为您要代理的所有路由的中间件。