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



摘要

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

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

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

示例

  • 客户端调用[GET]/billing=>代理clojure服务器
  • 代理clojure服务器使用客户端凭据对请求进行身份验证=>身份验证服务器
  • 代理clojure服务器用计费数据填充json=>计费服务器
  • 代理clojure服务器用客户数据填充json=>客户服务器
  • proxyclojure服务器返回200并解析完整的JSON

设置

  • 我有一个项目的结构与正在做的类似:lein新的基座服务我的应用程序

我一直在尝试什么

  • 我一直在尝试使用https://github.com/tailrecursion/ring-proxy

示例:

(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的新手。我没有选择了,因为谷歌也很复杂,有时毫无用处

看看这里的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"}})))

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

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

请参阅cljhttp库以进行请求。Clojure工具箱列出了许多其他选项。

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

相关内容

最新更新