2

概括

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

  • 接收请求
  • 将请求转发到外部服务器
  • 发出多个服务器到服务器的请求以提供更大的 json 并作为单个请求返回给客户端

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

例子

  • 客户端调用 [GET] /billing => proxy-clojure-server
  • proxy-clojure-server使用客户端凭据验证请求 => auth-server
  • proxy-clojure-server用计费数据填充 json => billing-server
  • proxy-clojure-server用客户数据填充 json => customer-server
  • proxy-clojure-server返回 200 并解析完整的 JSON

设置

  • 我有一个结构类似的项目: lein new pedestal-service my-app

我一直在尝试的

例子:

(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 的新手。而且我没有选择,因为谷歌关于那个也很复杂,有时没用
4

2 回答 2

1

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

请参阅clj-http 库以发出请求。Clojure 工具箱列出了许多其他选项。

您可能还对此文档资源列表感兴趣。

于 2020-04-20T23:55:06.457 回答
1

看看这里ring-request-proxy_ 从文档:

(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"}})))

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

于 2021-02-19T01:11:23.713 回答